GGL
資深會員
發表:104 回覆:600 積分:335 註冊:2006-11-05
發送簡訊給我
|
請問除了將耳機孔跟麥克風孔接起來的方法外,如何直接將音效卡(喇叭)發生的聲音錄下?謝謝 記得好幾個月前有在站上看到如何實做,但我找不到那篇文章,不知道是不是我記錯了
|
RedSnow
版主
發表:79 回覆:1322 積分:845 註冊:2003-12-15
發送簡訊給我
|
GGL 您好: 看看下列這一篇是不是您早先看過的那一篇?(Delphi 的討論與範例)
直接錄下電腦音效卡所發出的聲音!!!!
http://delphi.ktop.com.tw/topic.php?topic_id=58252
該篇討論中 linmon416 說是 這程式真的可以錄,但是數天前另一位網友詢問類似問題,我也提供了相同的連結供發問者參考,但是發問者回應說該篇是 錄麥克風聲音的....,我都不知道誰說的才是正確的了? 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/09/19 13:11:06
|
GGL
資深會員
發表:104 回覆:600 積分:335 註冊:2006-11-05
發送簡訊給我
|
這一篇我有看過,但是是delphi的,我不知道該怎麼改成BCB...像是TWavHeader我不知道該怎麼改成BCB可以用的,麻煩指導一下吧,謝謝
|
RedSnow
版主
發表:79 回覆:1322 積分:845 註冊:2003-12-15
發送簡訊給我
|
GGL 您好: 我對 Delphi 也不是很瞭解,剛才試著將那支程式轉為 BCB 的敘述,雖然測試過的結果是可以執行,但是我並不確定是不是有什麼地方轉得不正確?您參考一下吧: // 於 .h 檔案內:
#include typedef struct{
long rId;
long rLen;
long wId;
long fId;
long fLen;
WORD wFormatTag;
WORD nChannels;
long nSamplesPerSec;
long nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
long dId;
long wSampleLength;
} TWavHeader; __published: // IDE-managed Components
void __fastcall BtStartClick(TObject *Sender);
void __fastcall BtStopClick(TObject *Sender); private: // User declarations
void __fastcall CreateWav(WORD channels, WORD resolution, long rate, String fn); // 於 .cpp 檔案內:
void __fastcall TForm1::CreateWav(WORD channels, WORD resolution, long rate, String fn)
{
TFileStream *wf = new TFileStream(fn, fmCreate);
TWavHeader wh;
wh.rId = 0x46464952;
wh.rLen = 36;
wh.wId = 0x45564157;
wh.fId = 0x20746d66;
wh.fLen = 16;
wh.wFormatTag = 1;
wh.nChannels = channels;
wh.nSamplesPerSec = rate;
wh.nAvgBytesPerSec = channels*rate*(resolution / 8);
wh.nBlockAlign = channels*(resolution / 8);
wh.wBitsPerSample = resolution;
wh.dId = 0x61746164;
wh.wSampleLength = 0; int cnt = sizeof(TWavHeader);
wf->WriteBuffer(&wh, cnt);
delete wf;
}
//--------------------------------------------------------------------------- void __fastcall TForm1::BtStartClick(TObject *Sender)
{
try {
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(true) {
BtStart->Enabled = true;
BtStop->Enabled = false;
Application->MessageBox("媒体設備初始化失敗!", "錯誤", MB_ICONERROR MB_OK);
}
}
//--------------------------------------------------------------------------- void __fastcall TForm1::BtStopClick(TObject *Sender)
{
try {
MediaPlayer1->Stop();
MediaPlayer1->Save();
MediaPlayer1->Close();
Application->MessageBox("聲音錄製完畢!", "成功", MB_ICONINFORMATION MB_OK);
BtStart->Enabled = true;
BtStop->Enabled = false;
} __except(true) {
Application->MessageBox("保存聲音文件出錯!", "錯誤", MB_ICONERROR MB_OK);
BtStart->Enabled = true;
BtStop->Enabled = false;
}
} 7 天天敲鍵盤 v 時時按滑鼠 8
|
GGL
資深會員
發表:104 回覆:600 積分:335 註冊:2006-11-05
發送簡訊給我
|
謝謝,可以錄音了,只是我有一個疑問....
如果我的系統音量控制的錄音選項選擇的是麥克風,他就是透過麥克風錄音,如果是選擇立體聲混音,他就會錄下音效卡發出的聲音。那是一般的麥克風錄音程式將錄音裝置改成立體聲混音就可以達到我的要求了嗎 還有,可以透過程式自動將錄音裝置改成立體聲混音嗎?謝謝
|
RedSnow
版主
發表:79 回覆:1322 積分:845 註冊:2003-12-15
發送簡訊給我
|
GGL 您好: 引言:那是一般的麥克風錄音程式將錄音裝置改成立體聲混音就可以達到我的要求了嗎 應該是的,至少在視窗系統所附著的 "錄音機" 程式是可以的,或許所有的錄音程式都應該適用,但是我無法肯定的答覆您,因為我不能排除某些程式可能會使用一些特殊的寫法而導致不同結果。引言:還有,可以透過程式自動將錄音裝置改成立體聲混音嗎? 理論上應該是可以的,您不是透過視窗系統的音量調整程式來設定的嗎?那就應該可以透過程式來做相關設定,但是我手邊並無相關資訊可直接提供給您參考,真的很抱歉....。 <> <>> 天天敲鍵盤 <>> 時時按滑鼠 <>> >
|
jeffreck
高階會員
發表:247 回覆:340 積分:197 註冊:2003-01-23
發送簡訊給我
|
我的作法 是直接修改 錄音控制之設定 Mono Mix,就可以錄音了 我想因該也可以用 WINAPI 去改
|