時間とともに変化する特定の周波数と振幅の連続音を生成して再生したい。私は音の間に遅延を持たせたくありません。 DelphiやC++ Builderでこれをどうすればできますか?周波数を変えて連続トーンを生成するにはどうしたらいいですか?
9
A
答えて
1
WaveAudioライブラリを使用することにより、連続余弦波を生成することが可能です。
私はいくつかのコードを掲載するつもりでしたが、私はそれを正しく行う方法を理解できないので、私はそうしません。
しかし、TLiveAudioPlayerを使用してOnDataイベントをオーバーライドするだけで済みます。
また、メッセージポンプがない場合は、Asyncをtrueに設定します。
17
これは非常に簡単な例です。あなたが得る
はprogram Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows, MMSystem;
type
TWaveformSample = integer; // signed 32-bit; -2147483648..2147483647
TWaveformSamples = packed array of TWaveformSample; // one channel
var
Samples: TWaveformSamples;
fmt: TWaveFormatEx;
procedure InitAudioSys;
begin
with fmt do
begin
wFormatTag := WAVE_FORMAT_PCM;
nChannels := 1;
nSamplesPerSec := 44100;
wBitsPerSample := 32;
nAvgBytesPerSec := nChannels * nSamplesPerSec * wBitsPerSample div 8;
nBlockAlign := nChannels * wBitsPerSample div 8;
cbSize := 0;
end;
end;
// Hz // msec
procedure CreatePureSineTone(const AFreq: integer; const ADuration: integer;
const AVolume: double { in [0, 1] });
var
i: Integer;
omega,
dt, t: double;
vol: double;
begin
omega := 2*Pi*AFreq;
dt := 1/fmt.nSamplesPerSec;
t := 0;
vol := MaxInt * AVolume;
SetLength(Samples, Round((ADuration/1000) * fmt.nSamplesPerSec));
for i := 0 to high(Samples) do
begin
Samples[i] := round(vol*sin(omega*t));
t := t + dt;
end;
end;
procedure PlaySound;
var
wo: integer;
hdr: TWaveHdr;
begin
if Length(samples) = 0 then
begin
Writeln('Error: No audio has been created yet.');
Exit;
end;
if waveOutOpen(@wo, WAVE_MAPPER, @fmt, 0, 0, CALLBACK_NULL) = MMSYSERR_NOERROR then
try
ZeroMemory(@hdr, sizeof(hdr));
with hdr do
begin
lpData := @samples[0];
dwBufferLength := fmt.nChannels * Length(Samples) * sizeof(TWaveformSample);
dwFlags := 0;
end;
waveOutPrepareHeader(wo, @hdr, sizeof(hdr));
waveOutWrite(wo, @hdr, sizeof(hdr));
sleep(500);
while waveOutUnprepareHeader(wo, @hdr, sizeof(hdr)) = WAVERR_STILLPLAYING do
sleep(100);
finally
waveOutClose(wo);
end;
end;
begin
try
InitAudioSys;
CreatePureSineTone(400, 1000, 0.7);
PlaySound;
except
on E: Exception do
begin
Writeln(E.Classname, ': ', E.Message);
Readln;
end;
end;
end.
お知らせ特にきちんとしたインターフェース:
InitAudioSys;
CreatePureSineTone(400, 1000, 0.7);
PlaySound;
関連する問題
- 1. aubioを使用して、一連のトーンで各トーンの周波数を取得する方法
- 2. pyaudioで周波数を変更している間の連続音
- 3. MATLABでデュアルトーン周波数をどのように生成しますか?
- 4. 周波数を数え、周波数をゼロにする方法は?
- 5. Rでビン周波数テーブルを生成するには?
- 6. Rのヒストグラムの上に周波数ポリゴンを重ねるにはどうしたらいいですか?
- 7. 高い周波数でwavファイルを再生するには?
- 8. ボタンを押して音の周波数(Fs)を変更するにはどうすればよいですか?
- 9. 周波数テーブルからサイドバイサイドボックスプロットを作成するにはどうすればよいですか?
- 10. Javaでは、特定の周波数のトーンを合成する方法はありますか?
- 11. matlabを使用して異なる周波数の正弦波を生成するにはどうすればよいですか?
- 12. ヒートマップベースの値(周波数ではない)を作成するにはどうすればよいですか?
- 13. 生のオーディオを録音してから周波数を取得するには?
- 14. Android:周波数を生成するには?
- 15. 特定のサウンド周波数を生成するには?
- 16. タイムステップはプログラムのサンプリング周波数に関連していますか? MatLabの
- 17. イメージノイズ周波数を生成する方法は?
- 18. MATLABで特定の周波数のパルス波を生成する方法
- 19. 周波数テーブルを実際のデータのベクトルに変換するにはどうすればよいですか?
- 20. オーディオサンプルの周波数はチャンネルに依存していますか?
- 21. 関数(周波数)を使って文字を数えよう
- 22. タイムスタンプを生成してjmeterの変数に入れるにはどうしたらいいですか?
- 23. 入力バスのタップ周波数を変更するにはどうすればよいですか?
- 24. 複数の機能を連続して実行するにはどうしたらいいですか?
- 25. JavaScript WebAudioは複数の周波数でサウンドを生成します
- 26. Dockerをより高いCPU周波数で起動させるにはどうすればいいですか?
- 27. ハッシュの連続したエントリを返すprocを生成するにはどうすればよいですか?
- 28. ubuntuでgccを使って特定の周波数のサウンドを生成していますか?
- 29. CPU周波数を超えるベンチマーク
- 30. d3.jsのティック周波数を変更してください
[waveOutXXX関数ファミリ](http://msdn.microsoft.com/en-us/library/windows/desktop/dd757715(v = vs.85).aspx) –
私の答えを受け入れていないので、私はそれがあなたを助けなかったと仮定します。なぜそれがあなたを助けなかったのか説明することができますか? –