Как мне записать необработанные байты на звуковое устройство?

Раньше вы могли открывать /dev/dsp для чтения и записи, теперь с PulseAudio это больше не работает.

Я думал, что вы можете сделать это с padsp, но этот код не запускается:

import ossaudiodev

f = ossaudiodev.open("w")
fmt, channels, rate = dsp.setparameters(fmt, channels, rate)

(запуск через padsp python script.py)

Я получаю ошибку No such file or directory: '/dev/dsp'.

Чего мне не хватает? Как читать и записывать необработанные байты со звукового устройства и на него и как выбрать, какой из них я хочу использовать?

5
задан 5 April 2011 в 01:11

1 ответ

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

#!/usr/bin/env python3

import random
import ctypes
import struct

class NoiseMaker (object):

    PA_SAMPLE_U8 = 0
    PA_STREAM_PLAYBACK = 1

    def __init__(self, rate, channels):
        pat_sample_spec = ctypes.c_buffer(struct.pack("LLB",
            self.PA_SAMPLE_U8, rate, channels))
        self.pa = ctypes.cdll.LoadLibrary("libpulse-simple.so.0")
        self.s = self.pa.pa_simple_new(0, "App", self.PA_STREAM_PLAYBACK,
            0, "App Noise", ctypes.byref(pat_sample_spec), 0, 0,0)

    def write(self, data):
        self.pa.pa_simple_write(self.s, data, len(data), 0)

    def __del__(self):
        self.pa.pa_simple_free(self.s)


one_second_noise = bytes(random.randint(0, 255) for i in range(44100*2))
NoiseMaker(44100, 2).write(one_second_noise)

Скорость (44100) определяет количество сэмплов в секунду реального времени. Он ожидает байты в диапазоне 0-255 включительно, что определяется PA_SAMPLE_U8 (эквивалентно «8-разрядному без знака», как показано, например, в Audacity). Если у вас более одного канала, он ожидает чередующиеся выборки для каждого из них. Таким образом, одна секунда шума имеет 44100 выборок на канал = 88200 выборок, где (по модулю 2 = 0) для левого канала.

Обратите внимание, что этот скрипт работает только на Python 3

0
ответ дан 5 April 2011 в 01:11

Другие вопросы по тегам:

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