R
r2d2droids
Guest
привіт всім,
я відправити аналогового аудіо сигналів за допомогою рис (A / D модуль) за допомогою науково FT232 в чіпі.Після цього я хочу написати ці цифрові сигнали з буфера і після буфер наповнюється, посилає сигнали на пристрій для відтворення.
я знайшов вихідний код, який може записувати і відтворювати хвилі, використовуючи мікрофон.але я не міг змінити це код мого проекту.
Код показаний нижче:
//------------------------------------------------ ---------------------------
# Включити <vcl\vcl.h>
# Ргадта ргадта
# Включити "WaveformAPI.h"
//------------------------------------------------ ---------------------------
# Ргадта ресурсів "*. DFM"
TForm1 * Form1;
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveHeader (WAVEHDR) оболонка функцій
\ ************************************************* ********************/
Ьоо WaveMakeHeader (непідписані довгий ulSize, HGLOBAL і HData, HGLOBAL і HWaveHdr,
LPSTR і lpData, LPWAVEHDR і lpWaveHdr)
(
HData = GlobalAlloc (GMEM_MOVEABLE | GMEM_SHARE, ulSize);
якщо (! HData) повернутися помилковим;
lpData = (LPSTR) GlobalLock (HData);
якщо (! lpData)
(
GlobalFree (HData);
повернутися помилковим;
)
HWaveHdr = GlobalAlloc (GMEM_MOVEABLE | GMEM_SHARE, sizeof (WAVEHDR));
якщо (! HWaveHdr)
(
GlobalUnlock (HData);
GlobalFree (HData);
повернутися помилковим;
)
lpWaveHdr = (LPWAVEHDR) GlobalLock (HWaveHdr);
якщо (! lpWaveHdr)
(
GlobalUnlock (HWaveHdr);
GlobalFree (HWaveHdr);
GlobalUnlock (HData);
GlobalFree (HData);
повернутися помилковим;
)
ZeroMemory (lpWaveHdr, sizeof (WAVEHDR));
lpWaveHdr-> lpData = lpData;
lpWaveHdr-> dwBufferLength = ulSize;
Повертає TRUE;
)
//------------------------------------------------ ---------------------------
недійсним WaveFreeHeader (HGLOBAL і HData, HGLOBAL і HWaveHdr)
(
GlobalUnlock (HWaveHdr);
GlobalFree (HWaveHdr);
GlobalUnlock (HData);
GlobalFree (HData);
)
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveIn (запис) оболонка функцій
\ ************************************************* ********************/
Ьоо WaveRecordOpen (LPHWAVEIN lphwi, HWND HWND, Int nChannels,
довгий lFrequency, Int nBits)
(
WAVEFORMATEX WFX;
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = (WORD) nChannels;
wfx.nSamplesPerSec = (DWORD) lFrequency;
wfx.wBitsPerSample = (WORD) nBits;
wfx.nBlockAlign = (WORD) ((* wfx.nChannels wfx.wBitsPerSample) /
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
wfx.nAvgBytesPerSec = (wfx.nSamplesPerSec wfx.nBlockAlign *);
wfx.cbSize = 0;
MMRESULT результат = waveInOpen (lphwi, WAVE_MAPPER, і WFX, (LONG) HWND, NULL,
CALLBACK_WINDOW);
якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
повернутися помилковим;
)
//------------------------------------------------ ---------------------------
Ьоо WaveRecordBegin (HWAVEIN ВЗГ, LPWAVEHDR і lpWaveHdr)
(
MMRESULT результат = waveInPrepareHeader (ОСО, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR)
(
MMRESULT результат = waveInAddBuffer (ОСО, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR)
(
MMRESULT результат = waveInStart (ТСО);
якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
)
)
повернутися помилковим;
)
//------------------------------------------------ ---------------------------
недійсним WaveRecordEnd (HWAVEIN ВЗГ, LPWAVEHDR і lpWaveHdr)
(
waveInStop (ТСО);
waveInReset (ТСО);
waveInUnprepareHeader (ОСО, lpWaveHdr, sizeof (WAVEHDR));
)
//------------------------------------------------ ---------------------------
недійсним WaveRecordClose (HWAVEIN ВЗГ)
(
waveInReset (ТСО);
waveInClose (ТСО);
)
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveOut (відтворення) функцій-оболонок
\ ************************************************* ********************/
Ьоо WavePlayOpen (LPHWAVEOUT lphwo, HWND HWND, Int nChannels,
довгий lFrequency, Int nBits)
(
WAVEFORMATEX WFX;
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = (WORD) nChannels;
wfx.nSamplesPerSec = (DWORD) lFrequency;
wfx.wBitsPerSample = (WORD) nBits;
wfx.nBlockAlign = (WORD) ((* wfx.nChannels wfx.wBitsPerSample) /
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
wfx.nAvgBytesPerSec = (wfx.nSamplesPerSec wfx.nBlockAlign *);
wfx.cbSize = 0;
MMRESULT результат = waveOutOpen (lphwo, WAVE_MAPPER, і WFX, (LONG) HWND, NULL,
CALLBACK_WINDOW);
якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
повернутися помилковим;
)
//------------------------------------------------ ---------------------------
Ьоо WavePlayBegin (HWAVEOUT hwo, LPWAVEHDR і lpWaveHdr)
(
MMRESULT результат = waveOutPrepareHeader (hwo, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR)
(
MMRESULT результат = waveOutWrite (hwo, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
)
повернутися помилковим;
)
//------------------------------------------------ ---------------------------
недійсним WavePlayEnd (HWAVEOUT hwo, LPWAVEHDR і lpWaveHdr)
(
waveOutReset (hwo);
waveOutUnprepareHeader (hwo, lpWaveHdr, sizeof (WAVEHDR));
)
//------------------------------------------------ ---------------------------
недійсним WavePlayClose (HWAVEOUT hwo)
(
waveOutReset (hwo);
waveOutClose (hwo);
)
//------------------------------------------------ ---------------------------/************************************************* ******************** \
* Приклад використання ...
\ ************************************************* ********************/
__fastcall TForm1:: TForm1 (ТСотропепЬ * Власник)
ТГогт (Власник)
(
ulSize = 1000000;
FAllocated = брехня;
FRecording = брехня;
FPlaying = брехня;
TrackBar1-> Max = 0xFFFF;
TrackBar1-> Частота = 1000;
DWORD current_volume;
waveOutGetVolume (0, і current_volume);
TrackBar1-> Позиція = TrackBar1-> Max - LOWORD (current_volume);
)
//------------------------------------------------ ---------------------------
__fastcall TForm1:: ~ TForm1 ()
(
якщо (FAllocated) WaveFreeHeader (HData, HWaveHdr);
якщо (FRecording) WaveRecordClose (ТСО);
якщо (FPlaying) WavePlayClose (hwo);
)
//------------------------------------------------ ---------------------------
недійсним __fastcall TForm1:: RecordButtonClick (TObject * Sender)
(
якщо (WaveRecordOpen (та ОСО, ручка, 2, 44100, 16))
(
якщо (WaveMakeHeader (ulSize, HData, HWaveHdr, lpData, lpWaveHdr))
(
FAllocated = True;
якщо (WaveRecordBegin (ОСО, lpWaveHdr))
(
FRecording = True;
Caption = "Запис ...";
Shape1-> Brush-> Color = clRed;
StopButton-> Enabled = правда;
RecordButton-> Enabled = брехня;
)
)
)
)
//------------------------------------------------ ---------------------------
недійсним __fastcall TForm1:: StopButtonClick (TObject * Sender)
(
якщо (FRecording)
(
WaveRecordEnd (ОСО, lpWaveHdr);
FRecording = брехня;
)
якщо (FPlaying)
(
WavePlayEnd (hwo, lpWaveHdr);
FPlaying = брехня;
Shape2-> Brush-> Color = clBlack;
StopButton-> Enabled = брехня;
)
)
//------------------------------------------------ ---------------------------
недійсним __fastcall TForm1:: MMWimData (TMessage і Msg)
(
Caption = "записали";
якщо (FRecording) WaveRecordEnd (ОСО, lpWaveHdr);
WaveRecordClose (ТСО);
якщо (WavePlayOpen (і hwo, ручка, 2, 44100, 16))
(
ShowMessage ("Натисніть кнопку ОК, щоб почати відтворення! Якщо ви бачите це"
"Повідомлення перед натиснув кнопку" стоп ", потім"
"Буфера вибіг (збільшення ulSize ).");
якщо (WavePlayBegin (hwo, lpWaveHdr))
(
FPlaying = True;
Caption = "Гра ...";
Shape1-> Brush-> Color = clBlack;
Shape2-> Brush-> Color = clGreen;
)
)
)
//------------------------------------------------ ---------------------------
недійсним __fastcall TForm1:: MMWomDone (TMessage і Msg)
(
Caption = "DONE ГРА";
WavePlayClose (hwo);
RecordButton-> Enabled = правда;
StopButton-> Enabled = брехня;
Shape2-> Brush-> Color = clBlack;
)
//------------------------------------------------ ---------------------------
недійсним __fastcall TForm1:: TrackBar1Change (TObject * Sender)
(
DWORD = new_volume
(DWORD) MAKEWPARAM (TrackBar1-> Max - TrackBar1-> Посада,
TrackBar1-> Max - TrackBar1-> Позиція);
waveOutSetVolume ((HWAVEOUT) WAVE_MAPPER, new_volume);
)
//------------------------------------------------ ---------------------------Хто-небудь знає, як адаптувати цей вихідний код свого проекту або може показати мені ще одне джерело звуку код проекту steraming через USB?
THX ...
я відправити аналогового аудіо сигналів за допомогою рис (A / D модуль) за допомогою науково FT232 в чіпі.Після цього я хочу написати ці цифрові сигнали з буфера і після буфер наповнюється, посилає сигнали на пристрій для відтворення.
я знайшов вихідний код, який може записувати і відтворювати хвилі, використовуючи мікрофон.але я не міг змінити це код мого проекту.
Код показаний нижче:
//------------------------------------------------ ---------------------------
# Включити <vcl\vcl.h>
# Ргадта ргадта
# Включити "WaveformAPI.h"
//------------------------------------------------ ---------------------------
# Ргадта ресурсів "*. DFM"
TForm1 * Form1;
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveHeader (WAVEHDR) оболонка функцій
\ ************************************************* ********************/
Ьоо WaveMakeHeader (непідписані довгий ulSize, HGLOBAL і HData, HGLOBAL і HWaveHdr,
LPSTR і lpData, LPWAVEHDR і lpWaveHdr)
(
HData = GlobalAlloc (GMEM_MOVEABLE | GMEM_SHARE, ulSize);
якщо (! HData) повернутися помилковим;
lpData = (LPSTR) GlobalLock (HData);
якщо (! lpData)
(
GlobalFree (HData);
повернутися помилковим;
)
HWaveHdr = GlobalAlloc (GMEM_MOVEABLE | GMEM_SHARE, sizeof (WAVEHDR));
якщо (! HWaveHdr)
(
GlobalUnlock (HData);
GlobalFree (HData);
повернутися помилковим;
)
lpWaveHdr = (LPWAVEHDR) GlobalLock (HWaveHdr);
якщо (! lpWaveHdr)
(
GlobalUnlock (HWaveHdr);
GlobalFree (HWaveHdr);
GlobalUnlock (HData);
GlobalFree (HData);
повернутися помилковим;
)
ZeroMemory (lpWaveHdr, sizeof (WAVEHDR));
lpWaveHdr-> lpData = lpData;
lpWaveHdr-> dwBufferLength = ulSize;
Повертає TRUE;
)
//------------------------------------------------ ---------------------------
недійсним WaveFreeHeader (HGLOBAL і HData, HGLOBAL і HWaveHdr)
(
GlobalUnlock (HWaveHdr);
GlobalFree (HWaveHdr);
GlobalUnlock (HData);
GlobalFree (HData);
)
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveIn (запис) оболонка функцій
\ ************************************************* ********************/
Ьоо WaveRecordOpen (LPHWAVEIN lphwi, HWND HWND, Int nChannels,
довгий lFrequency, Int nBits)
(
WAVEFORMATEX WFX;
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = (WORD) nChannels;
wfx.nSamplesPerSec = (DWORD) lFrequency;
wfx.wBitsPerSample = (WORD) nBits;
wfx.nBlockAlign = (WORD) ((* wfx.nChannels wfx.wBitsPerSample) /
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
wfx.nAvgBytesPerSec = (wfx.nSamplesPerSec wfx.nBlockAlign *);
wfx.cbSize = 0;
MMRESULT результат = waveInOpen (lphwi, WAVE_MAPPER, і WFX, (LONG) HWND, NULL,
CALLBACK_WINDOW);
якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
повернутися помилковим;
)
//------------------------------------------------ ---------------------------
Ьоо WaveRecordBegin (HWAVEIN ВЗГ, LPWAVEHDR і lpWaveHdr)
(
MMRESULT результат = waveInPrepareHeader (ОСО, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR)
(
MMRESULT результат = waveInAddBuffer (ОСО, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR)
(
MMRESULT результат = waveInStart (ТСО);
якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
)
)
повернутися помилковим;
)
//------------------------------------------------ ---------------------------
недійсним WaveRecordEnd (HWAVEIN ВЗГ, LPWAVEHDR і lpWaveHdr)
(
waveInStop (ТСО);
waveInReset (ТСО);
waveInUnprepareHeader (ОСО, lpWaveHdr, sizeof (WAVEHDR));
)
//------------------------------------------------ ---------------------------
недійсним WaveRecordClose (HWAVEIN ВЗГ)
(
waveInReset (ТСО);
waveInClose (ТСО);
)
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveOut (відтворення) функцій-оболонок
\ ************************************************* ********************/
Ьоо WavePlayOpen (LPHWAVEOUT lphwo, HWND HWND, Int nChannels,
довгий lFrequency, Int nBits)
(
WAVEFORMATEX WFX;
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = (WORD) nChannels;
wfx.nSamplesPerSec = (DWORD) lFrequency;
wfx.wBitsPerSample = (WORD) nBits;
wfx.nBlockAlign = (WORD) ((* wfx.nChannels wfx.wBitsPerSample) /
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
wfx.nAvgBytesPerSec = (wfx.nSamplesPerSec wfx.nBlockAlign *);
wfx.cbSize = 0;
MMRESULT результат = waveOutOpen (lphwo, WAVE_MAPPER, і WFX, (LONG) HWND, NULL,
CALLBACK_WINDOW);
якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
повернутися помилковим;
)
//------------------------------------------------ ---------------------------
Ьоо WavePlayBegin (HWAVEOUT hwo, LPWAVEHDR і lpWaveHdr)
(
MMRESULT результат = waveOutPrepareHeader (hwo, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR)
(
MMRESULT результат = waveOutWrite (hwo, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
)
повернутися помилковим;
)
//------------------------------------------------ ---------------------------
недійсним WavePlayEnd (HWAVEOUT hwo, LPWAVEHDR і lpWaveHdr)
(
waveOutReset (hwo);
waveOutUnprepareHeader (hwo, lpWaveHdr, sizeof (WAVEHDR));
)
//------------------------------------------------ ---------------------------
недійсним WavePlayClose (HWAVEOUT hwo)
(
waveOutReset (hwo);
waveOutClose (hwo);
)
//------------------------------------------------ ---------------------------/************************************************* ******************** \
* Приклад використання ...
\ ************************************************* ********************/
__fastcall TForm1:: TForm1 (ТСотропепЬ * Власник)
ТГогт (Власник)
(
ulSize = 1000000;
FAllocated = брехня;
FRecording = брехня;
FPlaying = брехня;
TrackBar1-> Max = 0xFFFF;
TrackBar1-> Частота = 1000;
DWORD current_volume;
waveOutGetVolume (0, і current_volume);
TrackBar1-> Позиція = TrackBar1-> Max - LOWORD (current_volume);
)
//------------------------------------------------ ---------------------------
__fastcall TForm1:: ~ TForm1 ()
(
якщо (FAllocated) WaveFreeHeader (HData, HWaveHdr);
якщо (FRecording) WaveRecordClose (ТСО);
якщо (FPlaying) WavePlayClose (hwo);
)
//------------------------------------------------ ---------------------------
недійсним __fastcall TForm1:: RecordButtonClick (TObject * Sender)
(
якщо (WaveRecordOpen (та ОСО, ручка, 2, 44100, 16))
(
якщо (WaveMakeHeader (ulSize, HData, HWaveHdr, lpData, lpWaveHdr))
(
FAllocated = True;
якщо (WaveRecordBegin (ОСО, lpWaveHdr))
(
FRecording = True;
Caption = "Запис ...";
Shape1-> Brush-> Color = clRed;
StopButton-> Enabled = правда;
RecordButton-> Enabled = брехня;
)
)
)
)
//------------------------------------------------ ---------------------------
недійсним __fastcall TForm1:: StopButtonClick (TObject * Sender)
(
якщо (FRecording)
(
WaveRecordEnd (ОСО, lpWaveHdr);
FRecording = брехня;
)
якщо (FPlaying)
(
WavePlayEnd (hwo, lpWaveHdr);
FPlaying = брехня;
Shape2-> Brush-> Color = clBlack;
StopButton-> Enabled = брехня;
)
)
//------------------------------------------------ ---------------------------
недійсним __fastcall TForm1:: MMWimData (TMessage і Msg)
(
Caption = "записали";
якщо (FRecording) WaveRecordEnd (ОСО, lpWaveHdr);
WaveRecordClose (ТСО);
якщо (WavePlayOpen (і hwo, ручка, 2, 44100, 16))
(
ShowMessage ("Натисніть кнопку ОК, щоб почати відтворення! Якщо ви бачите це"
"Повідомлення перед натиснув кнопку" стоп ", потім"
"Буфера вибіг (збільшення ulSize ).");
якщо (WavePlayBegin (hwo, lpWaveHdr))
(
FPlaying = True;
Caption = "Гра ...";
Shape1-> Brush-> Color = clBlack;
Shape2-> Brush-> Color = clGreen;
)
)
)
//------------------------------------------------ ---------------------------
недійсним __fastcall TForm1:: MMWomDone (TMessage і Msg)
(
Caption = "DONE ГРА";
WavePlayClose (hwo);
RecordButton-> Enabled = правда;
StopButton-> Enabled = брехня;
Shape2-> Brush-> Color = clBlack;
)
//------------------------------------------------ ---------------------------
недійсним __fastcall TForm1:: TrackBar1Change (TObject * Sender)
(
DWORD = new_volume
(DWORD) MAKEWPARAM (TrackBar1-> Max - TrackBar1-> Посада,
TrackBar1-> Max - TrackBar1-> Позиція);
waveOutSetVolume ((HWAVEOUT) WAVE_MAPPER, new_volume);
)
//------------------------------------------------ ---------------------------Хто-небудь знає, як адаптувати цей вихідний код свого проекту або може показати мені ще одне джерело звуку код проекту steraming через USB?
THX ...