Что легкий кросс-платформенный WAV играет с библиотекой?

Попробуйте это с Bootstrap 4

Вы можете изменить padding на внутренних столбцах. Не забудьте поместить row в container или container-fluid, как описано здесь https://getbootstrap.com/docs/4.2/layout/grid/

[ 118] Контейнеры предоставляют средства для центрирования и горизонтального заполнения содержимого вашего сайта. Используйте .container для чувствительной ширины пикселя или .container-liquid для ширины: 100% для всех размеров окна просмотра и устройства.

BLOCKQUOTE>

13
задан Jon Seigel 27 April 2010 в 03:47
поделиться

5 ответов

Так как я также ищу ответ для вопроса, я провел немного исследования, и я не имею, находят любого простым (простой как вызывание одной функции) способ играть звуковой файл. Но с некоторыми строками кода, это возможно даже в портативном способе использовать уже упомянутый portaudio и libsndfile (LGPL).

Вот небольшой тестовый сценарий, который я записал для тестирования, оба освобождают:


#include <portaudio.h>
#include <sndfile.h>

static int
output_cb(const void * input, void * output, unsigned long frames_per_buffer,
        const PaStreamCallbackTimeInfo *time_info,
        PaStreamCallbackFlags flags, void * data)
{
    SNDFILE * file = data;

    /* this should not actually be done inside of the stream callback
     * but in an own working thread 
     *
     * Note although I haven't tested it for stereo I think you have
     * to multiply frames_per_buffer with the channel count i.e. 2 for
     * stereo */
    sf_read_short(file, output, frames_per_buffer);
    return paContinue;
}

static void
end_cb(void * data)
{
    printf("end!\n");
}

#define error_check(err) \
    do {\
        if (err) { \
            fprintf(stderr, "line %d ", __LINE__); \
            fprintf(stderr, "error number: %d\n", err); \
            fprintf(stderr, "\n\t%s\n\n", Pa_GetErrorText(err)); \
            return err; \
        } \
    } while (0)

int
main(int argc, char ** argv)
{
    PaStreamParameters out_param;
    PaStream * stream;
    PaError err;
    SNDFILE * file;
    SF_INFO sfinfo;

    if (argc < 2)
    {
        fprintf(stderr, "Usage %s \n", argv[0]);
        return 1;
    }

    file = sf_open(argv[1], SFM_READ, &sfinfo);
    printf("%d frames %d samplerate %d channels\n", (int)sfinfo.frames,
            sfinfo.samplerate, sfinfo.channels);

    /* init portaudio */
    err = Pa_Initialize();
    error_check(err);

    /* we are using the default device */
    out_param.device = Pa_GetDefaultOutputDevice();
    if (out_param.device == paNoDevice)
    {
        fprintf(stderr, "Haven't found an audio device!\n");
        return -1;
    }

    /* stero or mono */
    out_param.channelCount = sfinfo.channels;
    out_param.sampleFormat = paInt16;
    out_param.suggestedLatency = Pa_GetDeviceInfo(out_param.device)->defaultLowOutputLatency;
    out_param.hostApiSpecificStreamInfo = NULL;

    err = Pa_OpenStream(&stream, NULL, &out_param, sfinfo.samplerate,
            paFramesPerBufferUnspecified, paClipOff,
            output_cb, file);
    error_check(err);

    err = Pa_SetStreamFinishedCallback(stream, &end_cb);
    error_check(err);

    err = Pa_StartStream(stream);
    error_check(err);

    printf("Play for 5 seconds.\n");
    Pa_Sleep(5000);

    err = Pa_StopStream(stream);
    error_check(err);

    err = Pa_CloseStream(stream);
    error_check(err);

    sf_close(file);

    Pa_Terminate();

    return 0;
}

Некоторые примечания к примеру. Это не хорошая практика, чтобы сделать загрузку данных в потоковом обратном вызове, но в собственном потоке загрузки. Если необходимо играть несколько звуковых файлов, это становится еще более трудным, потому что не все portaudio бэкенды поддерживают несколько потоков для одного устройства, например, бэкенд OSS не делает, но бэкенд ALSA делает. Я не знаю, как ситуация находится на окнах. Так как все Ваши входные файлы имеют тот же тип, Вы могли смешать их на Вас собственный, который усложняет код немного больше, но затем у Вас была бы также поддержка OSS. Если у Вас были бы также различные частоты дискретизации или количество каналов, это стало очень трудным.

Таким образом, Если Вы не хотите играть несколько файлов одновременно, это могло бы быть решением или по крайней мере запуском для Вас.

10
ответ дан 1 December 2019 в 23:49
поделиться

SDL_Mixer, хотя не очень легкий, действительно имеет простой интерфейс для проигрывания файлов WAV. Я верю, как SDL, SDL_Mixer является также LGPL.

OpenAL является другой кросс-платформенной аудио библиотекой, которая более приспособлена к 3D аудио.

Еще одной аудио библиотекой с открытым исходным кодом, что Вы могли бы хотеть проверить его, является PortAudio

4
ответ дан 1 December 2019 в 23:49
поделиться

Я использовал OpenAL для проигрывания wav файлов как предупреждений/предупреждений в системе Управления воздушным движением

Преимущества, которые я нашел,

  1. это является кросс-платформенным
  2. работы с C (и другие, но Ваш вопрос о C),
  3. легкий вес
  4. хорошая имеющаяся в сети документация
  5. лицензия является LGPL, таким образом, Вы называете API без проблем лицензии
2
ответ дан 1 December 2019 в 23:49
поделиться

Можно попробовать этим: libao

1
ответ дан 1 December 2019 в 23:49
поделиться

Мне нравится FMOD. Лицензия является бесплатной для персонального использования и очень разумной для маленького условно-бесплатного программного обеспечения или коммерческих проектов

0
ответ дан 1 December 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: