C ++ библиотека для генерации и чтения аудио - PullRequest
3 голосов
/ 26 января 2012

Я ищу библиотеку C ++ (для Linux, но предпочтительно кроссплатформенную), которая позволит мне легко читать аудиофайлы в каком-то тривиальном формате, таком как необработанный поток байтов, генерировать аудиоданные в том же тривиальном формате и пишите аудио файлы. Мне все равно, в каком формате происходит чтение и запись, если они бесплатны (пиво и речь) и широко поддерживаются. Я собираюсь читать, преобразовывать и генерировать много маленьких аудиоклипов в очень параллельной программе, поэтому мне нужна библиотека, чтобы быть быстрой и поточно-ориентированной.

Дополнительные функции, которые мне бы хотелось, но не требовали, - это простые функции DSP (БПФ, фильтры) и запись / воспроизведение через звуковую карту.

Немного Googling ничего не обнаружил, но, возможно, я использую неправильные условия поиска. Я почти исключительно нашел библиотеки для использования в приложениях, которые записывают или воспроизводят, и неясно, имеют ли они возможность генерировать звук из необработанных байтов, и даже если они делают это, они кажутся излишними для моей цели. Я собирался написать свою собственную библиотеку для манипулирования файлами WAV, поскольку они кажутся достаточно простыми, но я бы не стал изобретать велосипед, если смогу его избежать.

Ответы [ 6 ]

1 голос
/ 03 февраля 2012

GStreamer является кроссплатформенным и широко используется:

GStreamer - это библиотека для построения графиков компонентов обработки мультимедиа.Поддерживаемые приложения варьируются от простого воспроизведения Ogg / Vorbis, потоковой передачи аудио / видео до сложной обработки аудио (микширование) и видео (нелинейное редактирование).

1 голос
/ 26 января 2012

Файл R / W: http://www.mega -nerd.com / libsndfile /

БПФ: http://www.fftw.org/

Аппаратное взаимодействие: http://jackaudio.org/

1 голос
/ 26 января 2012

Я могу быть совершенно не здесь, но из вашего описания звучит так, будто вы ищете что-то вроде OpenAL или FMOD . OpenAL полностью бесплатен, но FMOD бесплатен только для некоммерческого использования. Оба являются поточно-ориентированными и кроссплатформенными.

Как вы можете догадаться, начать работать с OpenAL намного сложнее, чем с FMOD, из-за отсутствия (хорошей) документации и правильных примеров.

0 голосов
/ 15 мая 2015

Я бы порекомендовал попробовать STK: https://ccrma.stanford.edu/software/stk/ Вы можете просто скопировать прошедшие вещи, которые вам нужны, в вашу программу (скажем, чтение и запись WAV-файлов). Это довольно просто в использовании. Он имеет учебные пособия (с кодом C ++). Они говорят, что это кроссплатформенный. Если вы собираетесь скомпилировать его для Linux, просто не забудьте добавить '-D__LITTLE_ENDIAN__' в командную строку g ++.

P.S. Просто взгляните на первые уроки. Они действительно короткие, простые и понятные.

0 голосов
/ 29 марта 2013

Взгляните на библиотеку BASS www.un4seen.com
BASS бесплатно для некоммерческого использования.

Платформы: Win32, OSX, Linux
BASS также доступен для платформ Win64, WinCE, iOS, Android и ARM Linux.

BASS - аудио библиотека для использования в программном обеспечении на нескольких платформах. это цель состоит в том, чтобы предоставить разработчикам мощный и эффективный образец, Поток (MP3, MP2, MP1, OGG, WAV, AIFF, пользовательский и многое другое через OS кодеки и дополнения), MOD музыка (XM, IT, S3M, MOD, MTM, UMX), MO3 музыка (MP3 / OGG сжатые моды) и функции записи. Все в компактная DLL / LIB, которая не раздувает ваш дистрибутив.

BASS поддерживает множество дополнений, прост в использовании, гибок, имеет хорошую документацию / примеры и лучшую поддержку, которую я когда-либо видел.

Как вам нравится:
Пользовательские образцы
А также WAV / AIFF / MP3 / MP2 / MP1 / OGG
Пример: создать образец синусоидальной волны 440 Гц.

HSAMPLE sample=BASS_SampleCreate(256, 28160, 1, 1, 
BASS_SAMPLE_LOOP|BASS_SAMPLE_OVER_POS); // create sample
short data[128]; // data buffer
int a;
for (a=0; a<128; a++)
    data[a]=(short)(32767.0*sin((double)a*6.283185/64)); // sine wave
BASS_SampleSetData(sample, data); // set the sample's data

Воспроизведение через звуковую карту
Одновременно используйте несколько звуковых карт и перемещайте каналы между ними

Пользовательский DSP
Применяйте любые эффекты в любом порядке
DSP настраивается с помощью:

HDSP BASS_ChannelSetDSP(
    DWORD handle,
    DSPPROC *proc,
    void *user,
    int priority
);

Пример: простая функция DSP для переключения левого / правого каналов стереофонического 16-битного канала.

void CALLBACK SwapDSP(HDSP handle, DWORD channel, void *buffer, DWORD length, void *user)
{
    short *s=buffer;
    for (; length; length-=4, s+=2) {
        short temp=s[0];
        s[0]=s[1];
        s[1]=temp;
    }
}

запись
Гибкая система записи, с поддержкой нескольких устройств и выбором входов (кодирование и трансляция WMA через дополнение и другие форматы через BASSenc)

FFT
Пример: выполните 1024 выборочных БПФ на канале и перечислите результат.

float fft[512]; // fft data buffer
BASS_ChannelGetData(channel, fft, BASS_DATA_FFT1024);
for (int a=0; a<512; a++)
    printf("%d: %f\n", a, fft[a]);
0 голосов
/ 26 января 2012

Как насчет SDL и SDL_Mixer ?Нет функции DSP, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...