Как записать wav файл python

Обновлено: 02.07.2024

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

Речевой сигнал имеет три важных параметра: количество каналов, частоту дискретизации и количество битов квантования.

  • Количество каналов: Может быть моно или двойной
  • Частота дискретизации: Количество поступлений звукового сигнала за одну секунду. Частота дискретизации 44100 Гц означает, что сигнал разлагается на 44100 частей в секунду. Другими словами, каждый $ \ frac Гц $ Он будет сохранен один раз, если частота дискретизации высока, то при воспроизведении звука носитель будет чувствовать, что сигнал непрерывный.
  • Количественная цифра: Сколько бит используется для выражения данных, собранных одной выборкой, обычно 8 бит, 16 бит, 24 бита и 32 бита и т. Д.

Например, звуковой сигнал, сохраненный на компакт-диске, является двухканальным, 44,1 кГц, 16 бит.

Волновой WAV-файл

Модуль wava предоставляет интерфейс к звуковому формату WAV, он не поддерживает сжатие / декомпрессию, но поддерживает моно / стерео.

Wave_read = wave.open(file,mode="rb")

файл - это обычно имя файла или путь к файлу в строковом формате

Например, путь к файлу voice.wav C: \ Users \ Never \ Desktop \ code для выступления

Файл имеет следующие три формата заполнения:

r"C:\Users\Never\Desktop\code for the speech\voice.wav"

"C:/Users/Never/Desktop/code for the speech/voice.wav"

"C:\\Users\\Never\\Desktop\\code for the speech\\voice.wav"

Три являются эквивалентными, правильное подчеркивание \ является escape-символом, если вы хотите выразить \, вам нужно \\, и r перед кавычкой указывает на исходную строку.

mode - параметр по умолчанию, который можно оставить пустым или «rb»: режим только для чтения; «wb»: режим только для записи. Обратите внимание, что формат чтения / записи не поддерживается.

open() Функция может быть использована with В заявлении. когда with Когда блок завершен, Wave_read.close() или Wave_write.close() Метод называется. Wave_read - поток файлов, прочитанный 。

Wave_read. getparams ()

str_data = Wave_read. readframes (nframes)

Укажите длину для чтения (в точках выборки), что возвращаетсястрокаТип данные

wave_data = np . fromstring ( str_data , dtype = np . short )

Преобразуйте прочитанные строковые данные в одномерный массив коротких типов.

Функция np.fromstring преобразует строку в массив и задает преобразованный формат данных через свой параметр dtype ( Поскольку наш звуковой формат представляет значение выборки в два байта, используется короткое преобразование типов данных)

Текущие данные wave_data представляют собой одномерный массив коротких типов, но поскольку наш звуковой файл является двухканальным, он поочередно состоит из выборок левого и правого каналов: LR

Getnchannels, getsampwidth, getframerate, getnframes и другие методы могут возвращать конкретную информацию о файлах WAV индивидуально.

Wave_read. close () Закройте файловый поток wave Wave_read. getnchannels () Возвращает количество аудиоканалов ( 1 Для моно, 2 Для стерео). Wave_read. getsampwidth () Возвращает ширину выборки в байтах. Wave_read. getframerate () Верните частоту дискретизации. Wave_read. getnframes () Возвращает количество аудио кадров. Wave_read. rewind () Перемотать указатель файла на начало аудиопотока. Wave_read. tell () Возвращает текущую позицию указателя файла. Прочитать аудио сигнал с 2 каналов

Чтение двухканальных сигналов и рисование сигналов


Второй способ прочитать файл:

from scipy.io import wavfile

sampling_freq, audio = wavfile.read("***.wav")

Аудио, читаемое здесь, представляет собой массив, без преобразования типов np.fromstring (str_data, dtype = np.short), как описано выше.

Кратковременная обработка аудиосигналов в частотной области

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

Преобразование сигналов во временной области в сигналы в частотной области обычно выполняется в речи Кратковременное преобразование Фурье 。

fft_audio = np.fft.fft(audio)


Wave-запись WAV аудио

При записи первого кадра данных первый вызов setnframes() Установите количество кадров, setnchannels (), чтобы установить количество каналов, setsampwidth (), чтобы установить количество бит квантования, setframerate (), чтобы установить частоту дискретизации, тогда writeframes(wave.tostring()) Используется для записи данных кадра.

Wave_write = wave.open(file,mode="wb")

Wave_write для записи потока файлов ,

Wave_write. setnchannels (N) Установите количество каналов.

Wave_write. setsampwidth (N) установить ширину выборки в n байтов, Количественная цифра

Wave_write. setframerate (N) будет Частота дискретизации Установите на n.

Wave_write. setnframes (N) Установите количество кадров в п

Wave_write. setparams (Tuple) установить все параметры в виде кортежа (nchannels, sampwidth, framerate, nframes,comptype, compname)

Wave_write. writeframes (Данные) записывают данные длины звука, в единицах точек выборки

Wave_write. tell () Возврат к текущей позиции в файле

Третий способ записи файлов

from scipy.io.wavfile import write

write(output_filename, freq, audio)

Синтезировать тональную музыку

Музыкальный проигрыватель

Библиотека Pyaudio используется для воспроизведения файла WAV

p = pyaudio.PyAudio()

stream = p.open(format = p.get_format_from_width(sampwidth),channels,rate,output = True)

Основные параметры метода open () объекта pyaudio перечислены ниже:

rate-Частота дискретизации

channels Количество каналов

formatФормат квантования выбранных значений (paFloat32, paInt32, paInt24, paInt16, paInt8 . ). В приведенном выше примере используйте метод get_format_from_width для преобразования возвращаемого значения 2 функции wf.sampwidth () в paInt16

input Флаг входного потока, если True, запускать поток ввода

output -Output stream flag, если True, включить выходной поток

input_device_index - Номер устройства, используемого входным потоком, если не указан, используется устройство по умолчанию системы

output_device_index - Номер устройства, используемого выходным потоком, если не указано, используется устройство по умолчанию системы

frames_per_buffer -Размер основного блока кеша, базовый кеш состоит из N блоков одинакового размера

start -Укажите, следует ли запускать поток ввода и вывода немедленно, значение по умолчанию - True

запись

Используя SAMPLING_RATE в качестве частоты дискретизации, каждый раз, когда читается блок выборок NUM_SAMPLES, когда в выборочных данных есть выборки COUNT_NUM со значением больше LEVEL, данные сохраняются в файле WAV. Самая короткая длина сохраненных данных - блоки SAVE_LENGTH. WAV-файл использует время, когда он был сохранен в качестве имени файла.

Данные, считываемые со звуковой карты, аналогичны данным, считанным из файла WAV, которые представляют собой двоичные данные, поскольку мы сохраняем значение выборки в формате paInt16 (16-битный короткий тип), оно преобразуется в массив dtype np.short.

Генерация и восприятие речевого сигнала

Чтобы проанализировать речь, мы должны сначала извлечь характеристические параметры, которые могут представлять речь. Эти параметры могут использоваться только с характеристическими параметрами для эффективной обработки. При обработке речевых сигналов качество речевого сигнала зависит не только от метода обработки. В то же время зависит от того, когда кандидат соответствует соответствующие параметры функции.

Голосовой сигнал является нестационарным изменяющимся во времени сигналом, но голосовой сигнал формируется импульсом возбуждения голосовой щели через звуковой канал, и движение мышц звукового канала (рот человека, полость носа) является медленным, поэтому «короткое время» ( 10

30 мс) можно считать, что речевой сигнал является стабильным и постоянным. Это составляет «технологию краткосрочного анализа» голосового сигнала.

При краткосрочном анализе речевой сигнал делится на участки Речевая рамка Каждый кадр обычно занимает 10

30 мс, и наше исследование основано на анализе речевых характеристик каждого кадра.

Различные извлеченные параметры речевого признака соответствуют различным методам анализа речевого сигнала: анализ во временной области, анализ в частотной области, анализ кепстральной области . Поскольку наиболее важные характеристики восприятия речевых сигналов отражаются в спектре мощности, и только изменение фазы В небольшой степени анализ всех речевых и аудио доменов является более важным.

Сигнализация окон

1. Прямоугольное окно

$$ w (n) = \ left \ 1 && 0 \ leq n \ leq L-1 \\ 0 && Other \ end \ right. $$

2. Окно Хэмминга

$$ w (n) = \ left \ \ frac (1-cos (\ frac )) && 0 \ leq n \ leq L-1 \\ 0 && Другое \ end \ right. $$

3. Окно Хеннинга

$$ w (n) = \ left \ 0.54-0.46cos (\ frac ) && 0 \ leq n \ leq L-1 \\ 0 && Other \ end \ право. $$

Оконное управление обычно требуется для усечения и кадрирования сигнала, потому что усечение имеет утечку энергии в частотной области, а оконная функция может уменьшить влияние усечения.

Функция окна находится в наборе инструментов обработки сигналов scipy.signal, например, в окне Hanning:


Формирование сигнала

В подкадре будет часть перекрытия между двумя смежными кадрами: длина кадра (wlen) = перекрытие (перекрытие) + сдвиг кадра (inc), если нет перекрытия между двумя соседними кадрами, то из-за формы оконной функции, Край перехваченного речевого кадра будет потерян, поэтому необходимо установить перекрывающуюся часть. inc - сдвиг кадра, который представляет смещение первого кадра следующего кадра, fs - частоту дискретизации, а fn - количество разделенных кадров речевого сигнала.

Теоретическая основа формирования сигнала, где x - речевой сигнал, а w - оконная функция:


Работа с окнами усекает аналогичную выборку. Чтобы гарантировать, что соседние кадры не слишком различаются, обычно существует сдвиг кадров между кадрами, который фактически является функцией интерполяционного сглаживания.

Дайте принципиальную схему:


Здесь в основном используется набор инструментов numpy, и в него включены следующие инструкции:

  • np.repeat: в основном повторять напрямую
  • np.tile: периодически повторяется в основном



Для данных:


Повторите операцию:


Плитка операция:



Реализация кода, соответствующая подкадру:

Это пример без окон:

Кратковременная обработка речевых сигналов во временной области

Краткосрочная энергия и кратковременная средняя амплитуда

Основное назначение кратковременной энергии и кратковременной средней амплитуды:

  • Различают вокализованные и невокализованные сегменты, потому что кратковременная энергия вокализованного $ E (i) $ намного больше, чем вокализованная
  • Различают границу между инициалами и гласными и границу между несессионным и несессионным

Краткосрочная средняя скорость пересечения нуля

Для непрерывных речевых сигналов скорость пересечения нуля означает, что сигнал во временной области проходит через ось времени.Для дискретных сигналов, если соседние отсчеты меняют знак, это называется пересечением нуля.

эффект:

Когда из-за голосовой волны озвучиваются звуки, высокая частота спектра падает, поэтому энергия голосового сигнала концентрируется ниже 3 кГц.

Когда невокализованный, большая часть энергии сосредоточена на более высоких частотах,

Поскольку высокая частота означает высокую краткосрочную среднюю скорость пересечения нуля, а низкая частота означает низкую краткосрочную среднюю скорость пересечения нуля, вокализованная речь имеет низкую скорость пересечения нуля, а невокализованный звук имеет высокую скорость пересечения нуля.

Используйте кратковременную среднюю скорость пересечения нуля, чтобы найти речевой сигнал от фонового шума,

2. Он может использоваться для определения начальной и конечной позиций сегмента без звука и текущего сегмента.

3. Когда фоновый шум небольшой, распознавание средней энергии более эффективно, а когда фоновый шум больше, краткосрочное распознавание средней скорости пересечения нуля является более эффективным.

Краткосрочная автокорреляционная функция

Краткосрочная автокорреляционная функция в основном используется для обнаружения конечной точки и извлечения основного тона. Характеристика пика будет появляться при целых кратных частоте финала. Обычно, шаг оценивается на основе первого пика, за исключением R (0). В корреляционной функции не видно никаких очевидных пиков.

Краткосрочная функция средней разности амплитуд

Он используется для определения периода основного тона и более прост в расчете, чем краткосрочная функция автокорреляции.

Извлечь особенности частотной области

После преобразования сигнала в частотную область его также необходимо преобразовать в полезную форму,Коэффициент кепструма частоты Mel(MFCC), MFCC сначала вычисляет спектр мощности сигнала, а затем использует комбинацию блока фильтров и дискретного косинусного преобразования для извлечения признаков.

Спектральный график

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

Фактически, сформированный сигнал получен, и преобразование частотной области получает амплитуду для получения спектрограммы.Если это только наблюдение, matplotlib.pyplot имеет инструкции для программ:


Последний код не прошел, есть много причин, библиотека skearn-learn изменила библиотеку minture. Я принимаю тест нижеСделаны некоторые модификации для подключения, Но все еще не может работать, это должно быть почти, я буду отлаживать код позже. Голосовые данные установлены наВот。

«Классический кейс для Python машинного обучения» Пратика Джоши

В этой статье мы обсудим 10 различных типов аудиомодулей и библиотек на Python для воспроизведения и записи звука, их уникальные особенности и преимущества.

Давайте разберемся с вышеуказанными аудиомодулями по очереди.

1. Аудиомодуль PYO

Инструмент модулей PYO в Python имеет примитивы, такие как математические операции, базовую обработку сигналов: задержки, генераторы синтеза, фильтры и многое другое. Но он также объединяет алгоритмы для создания звуковой грануляции и многих других художественных звуковых операций.

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

Эта библиотека предоставляет привязки для PortAudio. Пользователи могут использовать эту библиотеку для воспроизведения и записи звука на разных платформах, таких как Windows, Mac и Linux. Для воспроизведения звука с помощью библиотеки pyaudio пользователь должен писать в .stream.

Здесь пользователи могут заметить, что воспроизведение звука с использованием библиотеки pyaudio может быть немного сложнее по сравнению с другими библиотеками воспроизведения звука. Вот почему эта библиотека может быть не лучшим выбором пользователей для воспроизведения звука в своих проектах или приложениях.

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

Библиотека Pyaudio также позволяет пользователям воспроизводить и записывать звук в режиме обратного вызова, где указанная функция обратного вызова вызывается, когда новые данные необходимы для воспроизведения и доступны для записи. Это особенности библиотеки pyaudio, которые отличают ее от других аудиобиблиотек и модулей. Эта библиотека специально используется, если пользователь хочет воспроизвести звук помимо простого воспроизведения.

3. Dejavu

Модуль Dejavu превосходит распознавание отдельных сигналов с реалистичным количеством шума. Есть две формы, в которых пользователь может использовать Дежавю для распознавания звука:

  • Пользователь может распознавать аудио, читая и обрабатывая аудиофайлы на диске.
  • Пользователь может использовать микрофон компьютера.

4. Mingus

Пакет Mingus можно использовать для образовательных инструментов, для создания редакторов для песен, а также во многих других приложениях и программах, в которые пользователи хотят импортировать функцию обработки и воспроизведения музыки.

Этот пакет представляет собой теорию музыки и включает в себя такие темы, как гаммы, прогрессии, аккорды и интервалы. Mingus тестирует эти компоненты и использует для создания и распознавания музыкальных элементов с помощью удобных сокращений.

5. hYPerSonic

6. Pydub

Однако пользователи могут открывать и сохранять файл WAV с помощью библиотеки pydub без каких-либо зависимостей. Но пользователям необходимо установить пакет для воспроизведения звука, если они хотят воспроизводить звук.

Следующий код можно использовать для воспроизведения файла WAV с помощью pydub:

Если пользователь хочет воспроизводить другие форматы аудиофайлов, такие как файлы MP3, им следует установить libav или FFmpeg.

После установки FFmpeg пользователю необходимо внести небольшое изменение в код для воспроизведения файла MP3.

Используя оператор AudioSegment.from_file(имя_файла, тип_файла), пользователи могут воспроизводить любой формат аудиофайла, поддерживаемый ffmpeg.

Библиотека Pydub также позволяет пользователям сохранять аудио в различных форматах файлов. Пользователи также могут рассчитать длину аудиофайлов, использовать кроссфейды в аудио с помощью этой библиотеки.

7. Simpleaudio

В файле формата WAV сохраняется категоризация битов, которая представляет необработанные аудиоданные, а также хранятся заголовки вместе с метаданными в формате файла обмена ресурсами.

Окончательная запись состоит в том, чтобы сохранять каждый аудиосэмпл, который представляет собой конкретную точку данных, относящуюся к давлению воздуха, как при 44200 выборок в секунду, 16-битное значение для записей компакт-дисков.

Для уменьшения размера файла этого достаточно для хранения нескольких записей, таких как человеческая речь, с более низкой частотой дискретизации, например 8000 выборок в секунду. Однако более высокие звуковые частоты не могут быть представлены достаточно точно.

Некоторые из библиотек и модулей, обсуждаемых в этой статье, воспроизводят и записывают байтовые объекты, а некоторые из них используют массивы NumPy для записи необработанных аудиоданных. Оба напоминают категоризацию точек данных, которые можно воспроизводить с определенной частотой дискретизации для воспроизведения звука.

Пользователи могут воспроизводить массивы NumPy и байтовые объекты в библиотеке simpleaudio с помощью оператора simpleaudio.play_buffer(). Но перед этим пользователи должны убедиться, что они уже установили библиотеки NumPy и simpleaudio.

Пример: сгенерировать массив Numpy, соответствующий тону 410 Гц.

8. winsound

В модуле winsound файл WAV можно воспроизвести с помощью всего нескольких строк кода.

Модуль winsound не поддерживает никаких форматов файлов, кроме файлов WAV. Это позволяет пользователям подавать звуковой сигнал своим динамикам, используя выражение winsound.Beep(частота, продолжительность).

9. python-sounddevice

Если пользователь хочет воспроизвести файл WAV, он должен установить NumPy и звуковой файл, чтобы открыть формат аудиофайла в файлах WAV в виде массивов NumPy.

Оператор sound_file.read() используется для извлечения необработанных аудиоданных, а также частоты дискретизации файла, которые хранятся в заголовке формата файла обмена ресурсами. Оператор sound_device.wait() используется для того, чтобы убедиться, что сценарий завершается только после завершения воспроизведения звука.

10. playsound

Модуль playsound используется для файлов, отформатированных в файл WAV и файл MP3, а также может работать с другими форматами файлов.

Заключение:

В этой статье мы обсудили различные типы библиотеки Python и модулей, которые используются для воспроизведения и записи различных типов аудиофайлов и звуков. Здесь мы объяснили различные функции и важность каждой библиотеки и модулей для воспроизведения звуков в проекте разработки и модификации приложений и программного обеспечения.

The wave module provides a convenient interface to the WAV sound format. It does not support compression/decompression, but it does support mono/stereo.

The wave module defines the following function and exception:

wave. open ( file , mode = None ) ¶

If file is a string, open the file by that name, otherwise treat it as a file-like object. mode can be:

Write only mode.

Note that it does not allow read/write WAV files.

A mode of 'rb' returns a Wave_read object, while a mode of 'wb' returns a Wave_write object. If mode is omitted and a file-like object is passed as file, file.mode is used as the default value for mode.

If you pass in a file-like object, the wave object will not close it when its close() method is called; it is the caller’s responsibility to close the file object.

The open() function may be used in a with statement. When the with block completes, the Wave_read.close() or Wave_write.close() method is called.

Changed in version 3.4: Added support for unseekable files.

An error raised when something is impossible because it violates the WAV specification or hits an implementation deficiency.

Wave_read Objects¶

Wave_read objects, as returned by open() , have the following methods:

Close the stream if it was opened by wave , and make the instance unusable. This is called automatically on object collection.

Returns number of audio channels ( 1 for mono, 2 for stereo).

Returns sample width in bytes.

Returns sampling frequency.

Returns number of audio frames.

Returns compression type ( 'NONE' is the only supported type).

Human-readable version of getcomptype() . Usually 'not compressed' parallels 'NONE' .

Returns a namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname) , equivalent to output of the get*() methods.

Wave_read. readframes ( n ) ¶

Reads and returns at most n frames of audio, as a bytes object.

Rewind the file pointer to the beginning of the audio stream.

The following two methods are defined for compatibility with the aifc module, and don’t do anything interesting.

Wave_read. getmark ( id ) ¶

The following two methods define a term “position” which is compatible between them, and is otherwise implementation dependent.

Wave_read. setpos ( pos ) ¶

Set the file pointer to the specified position.

Return current file pointer position.

Wave_write Objects¶

For seekable output streams, the wave header will automatically be updated to reflect the number of frames actually written. For unseekable streams, the nframes value must be accurate when the first frame data is written. An accurate nframes value can be achieved either by calling setnframes() or setparams() with the number of frames that will be written before close() is called and then using writeframesraw() to write the frame data, or by calling writeframes() with all of the frame data to be written. In the latter case writeframes() will calculate the number of frames in the data and set nframes accordingly before writing the frame data.

Wave_write objects, as returned by open() , have the following methods:

Changed in version 3.4: Added support for unseekable files.

Make sure nframes is correct, and close the file if it was opened by wave . This method is called upon object collection. It will raise an exception if the output stream is not seekable and nframes does not match the number of frames actually written.

Wave_write. setnchannels ( n ) ¶

Set the number of channels.

Wave_write. setsampwidth ( n ) ¶

Set the sample width to n bytes.

Wave_write. setframerate ( n ) ¶

Set the frame rate to n.

Changed in version 3.2: A non-integral input to this method is rounded to the nearest integer.

Set the number of frames to n. This will be changed later if the number of frames actually written is different (this update attempt will raise an error if the output stream is not seekable).

Wave_write. setcomptype ( type , name ) ¶

Set the compression type and description. At the moment, only compression type NONE is supported, meaning no compression.

Wave_write. setparams ( tuple ) ¶

The tuple should be (nchannels, sampwidth, framerate, nframes, comptype, compname) , with values valid for the set*() methods. Sets all parameters.

Return current position in the file, with the same disclaimer for the Wave_read.tell() and Wave_read.setpos() methods.

Wave_write. writeframesraw ( data ) ¶

Write audio frames, without correcting nframes.

Changed in version 3.4: Any bytes-like object is now accepted.

Write audio frames and make sure nframes is correct. It will raise an error if the output stream is not seekable and the total number of frames that have been written after data has been written does not match the previously set value for nframes.


Восприятие человеческим ухом высоких и низких звуков называется высотой звука (также называемой звуком). Тон в основном связан с частотой звуковых волн. Если частота звуковой волны высока, высота также высока. Общие Аудио Дети> Девочки> Мальчики.
Диапазон звуковых частот человеческого слуха составляет 20–20000 Гц (данные за пределами этого диапазона могут быть отключены при сжатии звука).

(2) Объем


Это громкость. Субъективное восприятие силы звука человеческим ухом называется громкостью. Громкость связана с амплитудой вибрации звуковой волны. Вообще говоря, чем больше амплитуда вибрации звуковой волны, тем больше громкость.
Восприятие громкости людьми также связано с частотой звуковых волн. Для звуковых волн одинаковой интенсивности, если их частоты различаются, человеческие уши будут ощущать разную громкость.

(3) Тон

То есть тембр. Цвет тона - это характеристика, которая различает два звука с одинаковой громкостью и одинаковой высотой звука, или комплексный ответ человеческого уха на звуковые волны различной частоты и интенсивности. Тембр связан с формой вибрационной волны звуковой волны или структурой частотного спектра звука.

2. Звуковое квантование и кодирование

(1) Процесс квантования звука

В реальной жизни звуки, которые мы слышим, являются непрерывными во времени. Мы называем такой сигнал аналоговым сигналом. Аналоговые сигналы (непрерывные сигналы) необходимо квантовать в цифровые сигналы (дискретные, прерывистые сигналы), прежде чем их можно будет использовать в компьютерах. Процесс количественной оценки разделен на 5 этапов, как показано ниже:


  • Аналоговый сигнал
    Звук в реальной жизни выражается как непрерывный и плавный сигнал, абсцисса - это ось времени, а ордината указывает силу звука.
  • отбор проб
    Выборка значений выполняется на непрерывной волне с определенным интервалом времени, и отбираются 10 выборок, как показано на рисунке ниже.
  • Количественно оценить
    квантуйте значение выборки, то есть установите шкалу по ординате и запишите значение ординаты для каждой выборки.
  • кодирование
    Преобразуйте каждое квантованное значение выборки в двоичный код.
  • Цифровой сигнал
    Соедините все образцы двоичных кодов и сохраните их на компьютере, чтобы сформировать цифровой сигнал.

(2) Основная концепция количественной оценки

1) Размер выборки

Сколько бит используется для хранения семпла, обычно используется 16 бит (это означает, что в вышеупомянутом процессе квантования диапазон значений ординаты составляет 0-65535, а звук не имеет отрицательного значения).

2) Частота дискретизации

То есть частота дискретизации (время дискретизации в секунду). Общие частоты дискретизации составляют 8 кГц, 16 кГц, 32 кГц, 44,1 кГц, 48 кГц и т. Д. Чем выше частота дискретизации, тем более реальным и естественным будет воспроизведение звука и, конечно же, больший объем данных.
В аналоговом сигнале диапазон человеческого слуха составляет 20–20000 Гц. Если частота дискретизации составляет 44,1 кГц, будет выполняться дискретизация звука 20 Гц, а синусоидальная волна будет дискретизирована 2200 раз; Будет произведена выборка звука 20000 Гц, средняя синусоида будет дискретизирована 2,2 раза.

3) Количество каналов

Чтобы восстановить реальное звуковое поле при воспроизведении звука, звук получается в нескольких разных направлениях одновременно при записи звука, и звук каждого направления является звуковым каналом. Количество каналов - это количество источников звука во время записи звука или количество соответствующих динамиков во время воспроизведения.Бывают моно, двойные и многоканальные.

4) Битрейт

Также называется битовой скоростью, это относится к количеству битов, передаваемых в секунду. Единица измерения - бит / с (бит в секунду). Чем выше скорость передачи, тем больше данных передается в секунду и тем лучше качество звука.

Формула расчета кодовой скорости:
Частота кода = частота дискретизации * размер выборки * количество каналов

Например, файл WAV с частотой дискретизации 44,1 кГц, размером дискретизации 16 бит и двухканальным кодированием PCM:
Скорость передачи = 44,1 Гц.16bit2=1411.2kbit/s。
Тогда размер записанной музыки за 1 минуту будет (1411,2 * 1000 * 60) / 8/1024/1024 = 10,09M.

3. Технология сжатия звука

Сжатие звука в основном включает 2 метода:

(1) Устранение избыточных данных

Основным методом такого сжатия является удаление собранной избыточной звуковой информации. Эти удаленные звуковые сигналы невозможно восстановить, поэтому это называется сжатием с потерями.
Избыточная информация включает звуковые сигналы, выходящие за пределы диапазона человеческого слуха, и звуковые сигналы, которые замаскированы. Что такое замаскированный сигнал? Маскирование сигнала подразделяется на маскирование в частотной области и маскирование во временной области.

1) Эффект маскировки в частотной области

Диапазон человеческого слуха составляет 20–20000 Гц, но это не означает, что, пока звук в этом частотном диапазоне может быть слышен, его способность слышать также зависит от размера звука в децибелах. Существует порог в децибелах. , который выше этого порога. Звук можно только слышать, а звук ниже этого порога не слышен. Порог разный на разных частотах.
Возможна иная ситуация. Например, два человека с одинаковой тональностью говорят одновременно, один громким голосом, а другой очень тихим. На слабый голос влияет громкий голос, делающий тихий невозможным Быть услышанным.

2) Эффект маскировки во временной области


Помимо явления маскировки между звуками, издаваемыми одновременно, существует также явление маскирования между соседними звуками во времени, которое называется временной маскировкой. Маскирование во временной области делится на расширенное маскирование и маскирование с задержкой, как показано на рисунке ниже. Основная причина временной маскировки заключается в том, что человеческому мозгу требуется определенное время для обработки информации. Вообще говоря, ведущая маска очень короткая, всего около 5-20 мс, в то время как задерживающая маска может длиться 50-200 мс.

(2) кодирование по Хаффману без потерь

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

  • Количество каналов: может быть моно или сдвоенным.
  • Частота дискретизации: количество раз, когда звуковой сигнал собирается за одну секунду.Частота дискретизации 44100 Гц означает, что сигнал разбивается на 44100 частей в секунду. Другими словами, он будет сохраняться каждые 1/44100 секунды.Если частота дискретизации высокая, носитель будет ощущать непрерывный сигнал при воспроизведении звука.
  • Количество битов квантования: сколько битов используется для выражения данных, собранных за одну выборку, обычно 8 бит, 16 бит, 24 бит и 32 бит.

1. Python читает аудио в формате .wav

Ниже приведен аудиокод чтения Python

2. Python записывает аудиофайлы .wav.

При записи первого кадра данных сначала установите количество кадров, вызвав setnframes (), setnchannels (), чтобы установить количество каналов, setsampwidth (), чтобы установить биты квантования, setframerate (), чтобы установить частоту дискретизации, а затем writeframes (wave.) tostring ()) используется для записи данных кадра.

Читайте также: