簡體   English   中英

為什么 SDL2 提供的緩沖區,對於音頻樣本,不夠大?

[英]Why the buffer provided by SDL2, for audio samples, is not big enough?

我使用 SDL2 創建具有以下格式的聲音:

freq = 32 * 1500;
format = AUDIO_F32SYS;
channels = 1;
samples = 1500;

我希望回調中的長度參數為 6000 ( 1 * sizeof(float) * 1500 ) 但它是 3000。

我試圖減少樣本數量,使用 2 個通道,但始終提供的緩沖區是需要的一半。

這是我打開音頻設備的方式:

SDL_AudioSpec want, have;
SDL_zero(want);
want.freq = 32 * 1500;
want.format = AUDIO_F32SYS;
want.channels = 1;
want.samples = 1500;
want.callback = ::PlayDing;
want.userdata = this;
m_Audio = SDL_OpenAudioDevice(nullptr, 0, &want, &have, SDL_AUDIO_ALLOW_ANY_CHANGE);
// want == have here

所有wanthave領域都是平等的。

在我在同一台筆記本電腦上從 Ubuntu 切換到 Debian 后,這個問題開始發生。

我有一個錯誤的假設,即每次調用回調時,它都應該填充samples數量的音頻數據。

callback 需要提供的樣本數量應該在 callback 內部根據length / sizeof(float)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM