Учебник по ffmpeg и SDL Урок 3: Воспроизведение звука | Participants
|
- Statistics
- Participants
- Translate into Russian
- Translation result
- 91% translated in draft. Almost done, let's finish it!
If you do not want to register an account, you can sign in with OpenID.
An ffmpeg and SDL Tutorial Tutorial 03: Playing Sound | Учебник по ffmpeg и SDL | |
Audio | ||
So now we want to play sound. SDL also gives us methods for outputting sound. The SDL_OpenAudio() function is used to open the audio device itself. It takes as arguments an SDL_AudioSpec struct, which contains all the information about the audio we are going to output. | Итак, теперь мы хотим воспроизводить звук. SDL также предоставляет нам методы для решения данной задачи. Функция SDL_OpenAudio() используется для открытия аудио устройства. Она принимает в качестве аргументов структуры SDL_AudioSpec, в которых содержится вся информация о звуке, который мы будем выводить. | |
Before we show how you set this up, let's explain first about how audio is handled by computers. Digital audio consists of a long stream of samples. Each sample represents a value of the audio waveform. Sounds are recorded at a certain sample rate, which simply says how fast to play each sample, and is measured in number of samples per second. Example sample rates are 22,050 and 44,100 samples per second, which are the rates used for radio and CD respectively. In addition, most audio can have more than one channel for stereo or surround, so for example, if the sample is in stereo, the samples will come 2 at a time. When we get data from a movie file, we don't know how many samples we will get, but ffmpeg will not give us partial samples - that also means that it will not split a stereo sample up, either. | Для начала объясню основные принципы обработки звука в компьютере. Цифровой звук состоит из длинного потока семплов. Каждый семпл представляет собой значение звукового сигнала. Звук записываются с определённой частотой, которая показывает сколько времени занимает проигрывание одного семпла, и измеряется в количестве семплов в секунду. Например, значения частоты 22,050 и 44,100 семплов в секунду используются для цифрового радио и CD соответственно. Кроме того, зачастую данные аудио могут состоять из более чем одного канала, так, например для стерео необходимо 2 канала. Когда мы получаем данные из медиафайла, мы не знаем, сколько семплов мы получим, но ffmpeg гарантирует отсутствие неполных семплов. | |
SDL's method for playing audio is this: you set up your audio options: the sample rate (called "freq" for frequency in the SDL struct), number of channels, and so forth, and we also set a callback function and userdata. When we begin playing audio, SDL will continually call this callback function and ask it to fill the audio buffer with a certain number of bytes. After we put this information in the SDL_AudioSpec struct, we call SDL_OpenAudio(), which will open the audio device and give us back another AudioSpec struct. These are the specs we will actually be using — we are not guaranteed to get what we asked for! | Процедура вывода звука с помощью SDL такова: сначала необходимо настроить параметры воспроизведения звука, такие как частота дискретизации (поле "freq" в структуре SDL), число каналов, и так далее, затем нужно установить функцию обратного вызова и userdata. После начала вывода звука, SDL будет постоянно вызывать эту функцию, чтобы она заполнила аудио буфер определенным количеством байт. После того, как мы аписали эту информацию в структуру SDL_AudioSpec, надо вызвать функцию SDL_OpenAudio(), которая откроет аудио устройство и вернёт нам еще одну такую же структуру. Эта дополнительная структура содержит фактические параметры, которые мы будем использовать и нет гарантии, что мы получим ровно то, что мы просили! | |
Setting Up the Audio | ||
Keep that all in your head for the moment, because we don't actually have any information yet about the audio streams yet! Let's go back to the place in our code where we found the video stream and find which stream is the audio stream. | Запомните пока это до того момента, когда эта информация понадобится, потому, что у нас на самом деле нет никакой информации об аудио-потоках. Давайте вернемся к тому месту в нашем коде, где мы нашли видео поток и найдём еще аудио-потоки. |
© Copyright (c) 2003 Fabrice Bellard, and a tutorial by Martin Bohme.. License: Creative Commons Attribution-Share Alike 2.5
