Я работаю с WAVE-файлом, воспроизводя его с помощью интерфейса ALSA PCM в Linux, и услышал шум при быстром и частичном воспроизведении файла.
Вот моя функция воспроизведения. >
static int playback_function(uint8_t *pcm_buf, int pcm_frames)
{
int rc;
uint8_t *buf;
int frame_size, sent;
int periodsize;
int left;
frame_size = chan * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16);
periodsize = sys_periodsize; // 320 in my system
buf = pcm_buf;
left = pcm_frames;
sent = 0;
while (left > 0) {
sent = (left > periodsize) ? periodsize : left;
rc = snd_pcm_writei(pcm_handle, buf, sent);
printf("rc: %d, sent: %d\n", rc, sent);
if (rc == -EAGAIN || (rc >= 0 && (size_t)rc < sent)) {
snd_pcm_wait(pcm_handle, 10);
} else if (rc == -EPIPE) {
snd_pcm_recover(pcm_handle, rc, 0);
} else if (rc < 0) {
break;
}
if (rc > 0) {
left -= rc;
buf += rc * frame_size;
}
}
return rc;
}
Pcm_buf и pcm_frames получены из swr_convert() в libswresample, в моем случае pcm_frames равно 1187.
Добавив printf("rc: %d, send: %d\n", rc, send);, я получил следующие журналы.
Я работаю с WAVE-файлом, воспроизводя его с помощью интерфейса ALSA PCM в Linux, и услышал шум при быстром и частичном воспроизведении файла. Вот моя функция воспроизведения. > [code]static int playback_function(uint8_t *pcm_buf, int pcm_frames) { int rc; uint8_t *buf; int frame_size, sent; int periodsize; int left;
frame_size = chan * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16); periodsize = sys_periodsize; // 320 in my system buf = pcm_buf; left = pcm_frames; sent = 0;
Итак, как я могу улучшить ВОЛНА играет без шума?? Я изменил вышеуказанную функцию, заполнив 0 до конца буфера данных (чтобы обеспечить тишину). [code]static int playback_test(uint8_t *pcm_buf, int pcm_frames) { uint8_t *buf; int trd; int rc; int left; int frame_size, sent; int periodsize; int aligned = 0;
frame_size = chan * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16); periodsize = sys_periodsize; // 320 in my system
buf = pcm_buf; left = pcm_frames; aligned = (left/periodsize + 1) * periodsize; memset(buf + left * frame_size, 0, (aligned - left) * frame_size); sent = 0; ///left = periodsize; // 0) { sent = (left > periodsize) ? periodsize : left; rc = snd_pcm_writei(pcm_handle, buf, sent); printf("rc: %d, sent: %d\n", rc, sent); if (rc == -EAGAIN || (rc >= 0 && (size_t)rc < sent)) { snd_pcm_wait(pcm_handle, 10); } else if (rc == -EPIPE) { snd_pcm_recover(pcm_handle, rc, 0); } else if (rc < 0) { break; } if (rc > 0) { left -= rc; buf += rc * frame_size; } } return rc; } [/code] По шуму НИКАКОГО улучшения нет.
Я пытаюсь понять, как данные PCM передаются с оборудования на DMA в ALSA при записи. В частности, я хотел бы изменить данные PCM до того, как они будут прочитаны в пользовательском пространстве. Меня интересует изменение данных непосредственно в...
Я интегрировал массив Byte Byte Byte Websocket и Socket, и я использовал приведенный ниже код, чтобы воспроизводить звук из байта, который получает от сокета, и он работает нормально, но когда есть задержка из сокета, звук останавливается и не...
Я разрабатываю приложение React Native, которое получает аудиоданные PCM через WebSocket, декодирует их из строки base64 и пытается воспроизвести их в реальном времени, используя настройку AVAudioEngine в Swift. Несмотря на подтверждение того, что...
Я пытаюсь создать скрипт для «выбора» объектов в Unity.
Когда я навожу курсор на объект, он должен окрашиваться в красный цвет (и так оно и есть), и когда я нажимаю 1, targetHighlighted скрипта будет установлен на объект, над которым я нахожу курсор...
У меня есть простой читатель WAV, который я нашел онлайн давным -давно, я вернулся к его использованию, но, похоже, он заменит около 1200 образцов в конце чанка данных одним случайным повторяющимся номером , например, -126800. В конце выборки...