直接錄下電腦音效卡所發出的聲音!!!! |
尚未結案
|
mtmkid
一般會員 發表:17 回覆:19 積分:7 註冊:2004-04-12 發送簡訊給我 |
|
scott777
一般會員 發表:10 回覆:15 積分:5 註冊:2002-08-26 發送簡訊給我 |
|
huei_brother
一般會員 發表:36 回覆:15 積分:10 註冊:2004-08-23 發送簡訊給我 |
|
scott777
一般會員 發表:10 回覆:15 積分:5 註冊:2002-08-26 發送簡訊給我 |
|
mtmkid
一般會員 發表:17 回覆:19 積分:7 註冊:2004-04-12 發送簡訊給我 |
|
linmon416
一般會員 發表:11 回覆:44 積分:11 註冊:2003-12-19 發送簡訊給我 |
|
linmon416
一般會員 發表:11 回覆:44 積分:11 註冊:2003-12-19 發送簡訊給我 |
mtmkid你好:
下面有個程式試試看(Delphi),是在k.top找的,而我的做法是打開一個flash,並執行此程式去錄flash的聲音,但在錄之前必須做一些設定,必須先執行縮在右下角的音量控制,選擇選項中的內容,選擇音量調整用於錄音,顯示下列音量控制,選擇你要的控制(會因音效卡的不同而有不同的選項),按確定,之後出現錄音控制畫面,此時我是把聲波輸出混音器選取,並調整其大小聲即可. 程序中,我們定義了一個Wav文件的文件與格式,錄音時先建立一個只有文件夾的Wav文件,然後將Mediaplayer1錄制下來的聲音寫入文件。其中CreateWav過程的幾個參數意義如下:第一個channels代表聲道,取1時代表單聲,取2時代表立體聲。resolution也只有兩個值可以選擇,取8時代表8位聲音,取16時代表16位聲音,rate則代表聲音頻率,如11025,22050, 44100。值越大則聲音越清晰,當然,所錄制的文件也越大。最後一個參數則代表對應的文件名稱。所以CreateWav可以有以下形式: CreateWav(1,8,11025,'C:\abc.wav');//在C根目錄下建立一個8位單聲頻率為11025的名稱abc.wav的Wav文件
CreateWav(2,16,44100,'C:\abc.wav');//在C根目錄下建立一個16位立體聲頻率為44100的名稱abc.wav的Wav文件
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer; type TWavHeader = record //定義一個Wav文件與格式 rId : longint; rLen : longint; wId : longint; fId : longint; fLen : longint; wFormatTag : word; nChannels : word; nSamplesPerSec : longint; nAvgBytesPerSec : longint; nBlockAlign : word; wBitsPerSample : word; dId : longint; wSampleLength : longint; end; TForm1 = class(TForm) MediaPlayer1: TMediaPlayer; BtStart: TButton; BtStop: TButton; procedure CreateWav(channels : word; resolution : word; rate : longint; fn : string);//自定義寫一個Wav文件與過程 procedure BtStartClick(Sender: TObject); procedure BtStopClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.CreateWav( channels : word; { 1(單聲)或2(立體聲) } resolution : word; { 8或16,代表8位或16位聲音 } rate : longint; { 聲音頻率,如11025,22050, 44100} fn : string { 對應的文件名稱 } ); var wf : file of TWavHeader; wh : TWavHeader; begin wh.rId := $46464952; wh.rLen := 36; wh.wId := $45564157; wh.fId := $20746d66; wh.fLen := 16; wh.wFormatTag := 1; wh.nChannels := channels; wh.nSamplesPerSec := rate; wh.nAvgBytesPerSec := channels*rate*(resolution div 8); wh.nBlockAlign := channels*(resolution div 8); wh.wBitsPerSample := resolution; wh.dId := $61746164; wh.wSampleLength := 0; assignfile(wf,fn); {打開對應文件} rewrite(wf); {移動指標到文件夾} write(wf,wh); {寫入文件夾} closefile(wf); {關閉文件} end; procedure TForm1.BtStartClick(Sender: TObject); begin try //在程序當前目錄下建立一個Wav文件Temp.wav CreateWav(1, 8, 11025, (ExtractFilePath(Application.ExeName) 'Temp.wav')); MediaPlayer1.DeviceType := dtAutoSelect; MediaPlayer1.FileName := (ExtractFilePath(Application.ExeName) 'Temp.wav'); MediaPlayer1.Open; MediaPlayer1.StartRecording; BtStart.Enabled:=false; BtStop.Enabled:=true; except BtStart.Enabled:=True; BtStop.Enabled:=false; Application.MessageBox('媒体設備初始化失敗!','錯誤',MB_ICONERROR MB_OK); end; end; procedure TForm1.BtStopClick(Sender: TObject); begin try MediaPlayer1.Stop; MediaPlayer1.Save; MediaPlayer1.Close; Application.MessageBox('聲音錄制完畢!','成功',MB_ICONINFORMATION MB_OK); BtStart.Enabled:=True; BtStop.Enabled:=false; except Application.MessageBox('保存聲音文件出錯!','錯誤',MB_ICONERROR MB_OK); BtStart.Enabled:=True; BtStop.Enabled:=false; end; end; end.補充:1、錄制的文件播放時可能要把音頻屬性的Wav調大。 2、如果系統安裝了其它一些音頻驅動程式,則可能錄制的Wav文件大小為零,但會同時生成一個TMP結尾的文件,將其更名為Wav就是錄制的聲音檔。但這種情況很少發生。(機會幾乎為0) |
mtmkid
一般會員 發表:17 回覆:19 積分:7 註冊:2004-04-12 發送簡訊給我 |
|
linmon416
一般會員 發表:11 回覆:44 積分:11 註冊:2003-12-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |