導航:首頁 > 編程語言 > java判斷音頻長度

java判斷音頻長度

發布時間:2024-06-23 07:52:36

① 如何使用java代碼獲取播放文件的時長

java中直接使用AudioInputStream類來操作音樂文件,獲取時長,實例如下:
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
public class AudioLength {
public static void main(String[] args) throws LineUnavailableException,
UnsupportedAudioFileException, IOException {
File file = new File("d:/test.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream(file);
clip.open(ais);
System.out.println( clip.getMicrosecondLength() / 1000000D + " s" );//獲取音頻文件時長
}
}

② java音頻文件的讀寫

Filefile=newFile("src.amr");
byte[]bts=newbyte[1024];
intlength=0;
try{
InputStreamstream=newFileInputStream(file);
OutputStreamos=newFileOutputStream(newFile("dest.amr"));
while((length=stream.read(bts))>0){
os.write(bts,0,length);
}
os.flush();
os.close();
stream.close();
}catch(Exceptione){
e.printStackTrace();
}

③ 如何用java編程,實現聲音特徵的提取

您好,1 雙方之間的網路連接
Java在這方面有其獨特的優勢,Java提供了豐富的網路類庫的支持,可以輕松編寫多種類型的網路通信程序。在我下面的例子中我就使用了TCP/IP協議,通過Java的Socket類進行編程。
2 音頻信號的採集和回放以及音頻數字信號的編碼與解碼
在解決這兩個問題的時候,在網上很幸運地通過一些文章的介紹,找到了Answer Machine 演示程序的源代碼(由of jsresources.org的Florian Bomers 和Matthias Pfisterer編寫,網址http://www.jsresources.org/apps/am.html)。在這個程序代碼中,有幾個解決我們問題所需要的類,而且作者將這些類封裝的很好,我們基本不需要做什麼改動,只需要屏蔽其中的調試信息的輸出就行了,更可貴的是它還封裝了幾種常見的音頻格式。其中的GSM格式(Global System for Mobile Telecommunications)就是我們下面例子中採用的壓縮格式,GSM格式可以將128kbps 的音頻數據流 (16bit通過8k Hz的音頻采樣) 壓縮為13kbps 的音頻數據流,非常適合語音信號的傳送,所以可謂是一石二鳥。
我分析過這幾個類的源代碼,不得不佩服它的作者,每個類的源代碼都很精煉,大家可以自己分析一下。好了下面就給大家講講這幾個類,並且將它們用到的Java Sound API中的類和函數等一並做個簡單介紹,讓大家對Java Sound API中常用的類也有個大致的了解。由於Java Sound API中的類比較多。限於篇幅無法對所有用到的類做詳盡的解釋,以下內容只是簡單提及了各個類的用途和使用規范,有關Java Sound API中類的具體介紹請大家訪問這里http://java.sun.com/j2se/1.4.2/docs/api/, 查找javax.sound.sampled的相關內容。
以下的提到幾個文件是從Answer Machine 演示程序的源代碼中提取出來的,由於是開放源代碼的程序,大家在使用的時候請注意相關的公共協議。
① AMAudioFormat類(封裝在AMAudioFormat.java文件中)
AMAudioFormat類封裝了CD、FM、TELEPHONE、GSM這四種質量的音頻格式的參數,使用起來也非常簡單,這樣我們在使用Java Sound API時就不用自己去寫那些復雜的代碼了,但為了明白Java Sound API的原理,我們需要對它的代碼做一下分析。它使用了Java Sound API中的AudioFormat這個類,這個類非常重要,在Java中對任何音頻數據的使用都要實現通過它指定所需要使用的音頻格式,AudioFormat類有一個嵌套的類AudioFormat.Encoding,實際上大部分對AudioFormat類的使用都是使用的這個嵌套的類。
AMAudioFormat類的重要方法:
名稱:getLineAudioFormat
調用格式:getLineAudioFormat(整型音頻格式代號)
返回值: 根據傳遞音頻格式代號生成的AudioFormat對象。
說道這里大家可能要問了,那麼通過Java Sound API可以直接使用GSM格式嗎?答案是比較復雜,但同樣有解決的辦法,作者在這里使用了另外的開源程序的類庫-tritonus的GSM編碼解碼庫。大家需要在這里www.tritonus.org/plugins.html下載tritonous_share.jar和tritonus_gsm.jar兩個文件,並在AMAudioFormat類中引用,這樣就完成了GSM格式的設置。需要告訴大家的是在對AMAudioFormat.java這個類進行編譯後,我們的程序運行的時候就可以不需要tritonous_share.jar和tritonus_gsm.jar這兩個文件的支持了。
② AudioCapture類(封裝在AudioCapture.java文件中)
AudioCapture類封裝了從音頻硬體捕獲音頻數據並自動編碼為GSM音頻壓縮數據的過程,並且通過它的getAudioInputStream()方法提供給我們一個音頻數據輸入流,我們就可以直接將這個流發送到網路中。
AudioCapture 類的重要方法:
名稱:getAudioInputStream
調用格式:getAudioInputStream()
返回值:AudioInputStream對象
AudioCapture 類使用了Java Sound API中的AudioInputStream、AudioFormat、AudioSystem這幾個類和TargetDataLine、LineListener介面。除了AudioFormat類我再簡單介紹一下其他的類:
AudioInputStream 類是帶有特殊音頻格式和長度的InputStream類,它有兩個構造方法,分別是AudioInputStream(InputStream stream, AudioFormat format,long length)和AudioInputStream(TargetData -Line line)。
TargetDataLine 介面是DataLine介面的一種,通過它就可以直接從音頻硬體獲取數據了,它有幾個常用的方法,分別是:open(AudioFormat format)、void open(AudioFormat format, int bufferSize)、int read(byte[] b, int off, int len)。
AudioSystem 類是Java標准音頻系統的入口點,在AudioSystem 類中使用他的getLine() 方法創建TargetDataLine對象。
LineListener介面用來對線路狀態改變的時間進行監聽,他的重要的方法是update(LineEvent event)方法。
③ AudioPlayStream類(封裝在AudioPlayStream.java文件中)
AudioPlayStream類與AudioCapture類剛好相反,它封裝了GSM壓縮音頻數據的解碼和音頻信號的回放過程,提供給我們一個音頻信號輸出流。AudioCapture類用到的Java Sound API中的類它也基本都用到了,只是它使用了SourceDataLine介面而不是TargetDataLine介面
④ Debug類(封裝在Debug.java文件中)
Debug類主要用來在調試時輸出訊息,代碼很少,後來我把其中輸出信息的語句都屏蔽了,對程序運行沒有影響。
為了方便使用以上的幾個類,我們需要對它們進行編譯和打包,編譯時需要設置相關的編譯環境,以下是我們需要用到的命令行
set CLASSPATH=%CLASSPATH%;.;tritonus_gsm.jar;tritonus_share.jar
javac am*.java amaudio*.java
jar cmf packagingmanifest.mf am.jar am*.class
amaudio*.class
說明一下,我將以上提到的Java源碼文件放在了am目錄下,編譯之後可以得到一個8k的am.jar文件,我們下一步所需要做的就是在我們的程序中引用這個包。

④ java闊蟲簮鏄浠涔堟剰鎬濓紵

Java闊蟲簮鏄鎸囧湪Java緙栫▼璇璦涓浣跨敤鐨勯煶棰戞暟鎹錛岃繖浜涙暟鎹鍙浠ョ敤鏉ユ挱鏀鵑煶棰戝唴瀹廣傚湪Java紼嬪簭涓錛屽紑鍙戜漢鍛樺彲浠ヤ嬌鐢↗ava Audio API鏉ュ疄鐜伴煶棰戠殑褰曞埗銆佸勭悊鍜屾挱鏀劇瓑鍔熻兘銆傞氳繃榪欑嶆柟寮忥紝Java紼嬪簭鍙浠ラ潪甯告柟渚垮湴闆嗘垚闊抽戝唴瀹癸紝浠庤屽炲己搴旂敤紼嬪簭鐨勫氬獟浣撳姛鑳姐
Java闊蟲簮鏄鍦↗ava騫沖彴涓婅繘琛屽紑鍙戠殑錛屽叾搴旂敤鑼冨洿闈炲父騫挎硾銆傚叿浣撴潵璇達紝Java闊蟲簮鍙浠ヨ鐢ㄤ簬寮鍙戝氬獟浣撳簲鐢ㄧ▼搴忋佹父鎴忋佽嗛戠紪杈戝櫒絳変紬澶氶嗗煙銆傚叾搴旂敤鑼冨洿瓚婃潵瓚婂箍娉涳紝鍥犱負瀹冧笉浠呭叿鏈夐珮鏁堛佸畨鍏ㄣ佸彲闈犵瓑鐗圭偣錛岃屼笖鍙浠ュ拰鍏朵粬Java搴撶浉緇撳悎錛屽艦鎴愬己澶х殑紼嬪簭寮鍙戝鉤鍙般
Java闊蟲簮鐨勪紭鍔垮湪浜庡畠璺ㄥ鉤鍙版уソ銆佺ǔ瀹氭ч珮銆佸彲鎵╁睍鎬у己絳夌壒鐐廣備簨瀹炰笂錛孞ava闊蟲簮鍙浠ヨ繍琛屽湪鍚勭嶄笉鍚岀殑鎿嶄綔緋葷粺涓婏紝浣垮緱紼嬪簭涓嶅繀鍙楅檺浜庝換浣曠壒瀹氱殑騫沖彴銆傛ゅ栵紝Java闊蟲簮鍏鋒湁鑹濂界殑紼沖畾鎬э紝鑳藉熶繚璇侀暱鏃墮棿榪愯屾椂鐨勭ǔ瀹氭у拰鍙闈犳с傚彟澶栵紝Java闊蟲簮榪樺彲浠ラ氳繃鎵╁睍搴撴潵澧炲己鍏跺姛鑳斤紝榪涗竴姝ユ弧瓚崇敤鎴風殑闇奼傘

⑤ 用JAVA怎樣捕獲音頻輸出數據

import java.io.*;
import javax.sound.sampled.*;
import java.net.*;

/**
* Title: VoiceChat
* Description: 輸出音頻(放音程序)
* Copyright: Copyright (c) 2001
* Company:
* @author 網路
* @version 1.0
*/

class Playback implements Runnable {

final int bufSize = 16384;
SourceDataLine line;
Thread thread;
Socket s;

Playback(Socket s){//構造器 取得socket以獲得網路輸入流
this.s=s;
}
public void start() {

thread = new Thread(this);
thread.setName("Playback");
thread.start();
}

public void stop() {
thread = null;
}

public void run() {

AudioFormat format =new AudioFormat(8000,16,2,true,true);//AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
BufferedInputStream playbackInputStream;

try {
playbackInputStream=new BufferedInputStream(new AudioInputStream(s.getInputStream(),format,2147483647));//封裝成音頻輸出流,如果網路流是經過壓縮的需在此加套解壓流
}
catch (IOException ex) {
return;
}

DataLine.Info info = new DataLine.Info(SourceDataLine.class,format);

try {
line = (SourceDataLine) AudioSystem.getLine(info);
line.open(format, bufSize);
} catch (LineUnavailableException ex) {
return;
}

byte[] data = new byte[1024];//此處數組的大小跟實時性關系不大,可根據情況進行調整
int numBytesRead = 0;
line.start();

while (thread != null) {
try{
numBytesRead = playbackInputStream.read(data);
line.write(data, 0,numBytesRead);
} catch (IOException e) {
break;
}
}

if (thread != null) {
line.drain();
}

line.stop();
line.close();
line = null;
}
}

import java.io.*;
import javax.sound.sampled.*;
import java.net.*;

/**
* Title: VoiceChat
* Description: 音頻捕捉(錄音程序)
* Copyright: Copyright (c) 2001
* Company:
* @author 網路
* @version 1.0
*/

class Capture implements Runnable {

TargetDataLine line;
Thread thread;
Socket s;
BufferedOutputStream captrueOutputStream;

Capture(Socket s){//構造器 取得socket以獲得網路輸出流
this.s=s;
}

public void start() {

thread = new Thread(this);
thread.setName("Capture");
thread.start();
}

public void stop() {
thread = null;
}

public void run() {

try {
captrueOutputStream=new BufferedOutputStream(s.getOutputStream());//建立輸出流 此處可以加套壓縮流用來壓縮數據
}
catch (IOException ex) {
return;
}

AudioFormat format =new AudioFormat(8000,16,2,true,true);//AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
DataLine.Info info = new DataLine.Info(TargetDataLine.class,format);

try {
line = (TargetDataLine) AudioSystem.getLine(info);
line.open(format, line.getBufferSize());
} catch (Exception ex) {
return;
}

byte[] data = new byte[1024];//此處的1024可以情況進行調整,應跟下面的1024應保持一致
int numBytesRead=0;
line.start();

while (thread != null) {
numBytesRead = line.read(data, 0,1024);//取數據(1024)的大小直接關繫到傳輸的速度,一般越小越快,
try {
captrueOutputStream.write(data, 0, numBytesRead);//寫入網路流
}
catch (Exception ex) {
break;
}
}

line.stop();
line.close();
line = null;

try {
captrueOutputStream.flush();
captrueOutputStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}

⑥ 鎬庝箞閫氳繃C#鎴朖AVA寰楀埌浠庨害鍏嬮庡緱鍒板0闊蟲垨瀹冪殑澹伴戞枃浠

JAVA澹伴煶 API榪涗竴姝ユ弿榪頒笁縐嶈懼囧瓙鐣岄潰:
InputDevice
銆銆InputDevice鐣岄潰鎻愪緵涓涓鏂規硶getInputChannel鏉ヨ幏寰椾竴涓狪nputChannel瀵硅薄錛屼粠涓鎹曡幏鍙璇葷殑闊抽戞暟鎹銆
OutputDevice
銆銆OutputDevice鐣岄潰鎻愪緵涓涓鏂規硶getOutputChannel鏉ヨ幏寰椾竴涓狾utputChannel瀵硅薄錛岄煶棰戞暟鎹鍙浠ュ啓鍏ヨヨ緭鍑洪氶亾錛屽苟浜堟挱鏀俱

銆銆Mixer
銆銆Mixer鏀鎸佸氫釜InputChannel鍜/鎴朇lip銆 鍙﹀,瀹冩彁渚涗簡鏌ヨ㈡柟娉曪紝浠庝腑鍙寰楀埌瀹冩墍鏀鎸佺殑閫氶亾鏁伴噺錛屽畠涔熸彁渚涗簡鏀鎸佸悓姝ユ殏鍋滃拰鍞ら啋澶氫釜閫氶亾鎾鏀劇殑鏂規硶銆

銆銆鎺т歡
閫氶亾鍜岄煶棰戠鍙 (姣斿傛壃澹板櫒鍜岄害鍏嬮)涓鑸鑳芥敮鎸佷竴緇勬帶浠舵瘮濡傚炵泭鍜屽畾浣嶃傞氳繃灝嗗畠鐨勭被浣滀負鍙傛暟浼犵粰getControl()鏂規硶錛孞AVA澹伴煶 API鐨勯氶亾瀵硅薄鍜岀鍙e硅薄鍙浠ヨ幏寰椾竴涓鐗瑰埆鐨勬帶浠躲
緙栫爜鍣
銆銆Codecs鍙浠ュ歸煶棰戞暟鎹緙栫爜鍜岃В鐮侊紝鍏佽稿湪涓嶅悓鏍煎紡鍜岀紪鐮佷箣闂磋漿鎹銆侸AVA澹伴煶 API閫氳繃AudioSystem綾諱腑鐨勬柟娉曚負榪欎簺杞鎹㈡彁渚涗簡楂樼駭鎺ュ彛銆傚傛灉緇欎簡涓涓鐗規畩鐨勯煶棰戞祦錛屽簲鐢ㄧ▼搴忎細鏌ヨ㈤煶棰戠郴緇熸潵鎵懼埌鐩稿簲鐨勮漿鎹錛屼粠鑰屽緱鍒版寚瀹氭牸寮忕殑闊抽戞祦銆
鏂囦歡鍜屾祦
闊抽戞祦鏄涓庨煶棰戞暟鎹鏍煎紡鍜屾暟鎹闀垮害鐩稿叧鐨勮緭鍏ユ祦錛屾枃浠舵祦鏄涓庢枃浠剁被鍨嬪拰鏁版嵁闀垮害鐩稿叧鐨勮緭鍏ユ祦銆侸AVA澹伴煶 API鍦ˋudioSystem綾諱腑涓洪煶棰戞枃浠跺拰闊抽戞祦涔嬮棿鐨勮漿鎹㈡彁渚涗簡鎺ュ彛銆
鏌ヨ㈠拰璁塊棶瀹夎呯粍浠
AudioSystem綾誨厖褰撳埌閲囨牱闊抽戠郴緇熻祫婧愬叆鍙g殑瑙掕壊銆傝ョ被鍏佽哥▼搴忓憳鏌ヨ㈠拰璁塊棶杈撳叆璁懼囥佽緭鍑鴻懼囦互鍙婂畨瑁呭ソ鐨勬販闊寵懼囥傚彟澶栵紝AudioSystem鍖呭惈璁稿氬湪涓嶅悓闊抽戞暟鎹鏍煎紡闂磋漿鎹㈢殑鏂規硶銆傚畠涔熸彁渚涗竴浜涙柟娉曪紝浣垮緱鍦ㄤ笉闇瑕佸硅懼囩洿鎺ユ搷浣滅殑鎯呭喌涓嬶紝鐩存帴鑾峰緱杈撳叆閫氶亾鎴栬緭鍑洪氶亾銆

浣犲彲浠ヨ瘯璇曞仛

⑦ java 切割wav音頻

1.首先應該得到音樂文件的時長---這個可以網路,我也不會,但應該可以實現

2.然後得到文件大小,除以文件總分鍾數
3.根據得到的大小切割文件(用二進制的方式讀取文件)

⑧ java中如何獲取音頻(mp3)長度

1.采樣率。
2.壓縮格式。
基本上就跟這倆東西有關了。
有了這個以後,可以根據文件的大小來計算播放時長。
至於具體的,我也沒算過。我覺得你可以cut一段音樂,比如wma格式的,看看一分鍾是多大。然後用你的文件大小來和這個標准文件作比較。
還有其他方法就是藉助外部包jar,也可使用JMF框架。

⑨ java 怎麼獲取音頻文件時長

File source =new File('d:\test.mp3');
Encoder encoder = new Encoder();
MultimediaInfo m = encoder.getInfo(source);
long ls = m.getDuration();
ration = ls/1000;
System.out.println("此視頻時長為:"+ls/60000+"分"+(ls/1000-ls/60000*60)+"秒!");

若用的是springmvc框架上傳文件

MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
Iterator<String> iter = multiRequest.getFileNames();

while(iter.hasNext()){

MultipartFile file = multiRequest.getFile(iter.next());
String fileOldName = file.getOriginalFilename();

long ration = 0;//音頻長度,秒

CommonsMultipartFile cf= (CommonsMultipartFile)file;
DiskFileItem fi = (DiskFileItem)cf.getFileItem();
File source = fi.getStoreLocation();
Encoder encoder = new Encoder();
MultimediaInfo m = encoder.getInfo(source);
long ls = m.getDuration();
ration = ls/1000;}

閱讀全文

與java判斷音頻長度相關的資料

熱點內容
django19常用版本 瀏覽:521
三國志11保存在哪個文件夾 瀏覽:88
iphone4s加速 瀏覽:108
編程內存和顯卡哪個重要 瀏覽:672
android連接網路列印機 瀏覽:195
linuxsftp如何上傳文件 瀏覽:603
蘋果文件覆蓋 瀏覽:327
網路足彩名人有哪些 瀏覽:639
pc共享網路給電腦 瀏覽:796
linuxkill重啟進程 瀏覽:658
sketchup景觀教程 瀏覽:730
win10管理找不到模塊 瀏覽:472
蘋果手機查看電腦文件 瀏覽:61
微信不訪問視頻文件夾嗎 瀏覽:259
文件夾加密大師注冊碼 瀏覽:1
onedrive怎麼上傳文件 瀏覽:488
android多線程寫文件棧溢出 瀏覽:242
台電酷閃量產工具 瀏覽:837
如何破壞文件 瀏覽:15
從什麼網站上查找國家標准 瀏覽:254

友情鏈接