Ste*_*zzo 5 sound programming pulseaudio
在过去,您曾经可以打开/dev/dsp进行阅读和写作,现在,有了 PulseAudio,这不再起作用。
我以为你可以用 来做padsp,但这段代码没有运行:
import ossaudiodev
f = ossaudiodev.open("w")
fmt, channels, rate = dsp.setparameters(fmt, channels, rate)
Run Code Online (Sandbox Code Playgroud)
(通过运行它padsp python script.py)
我得到的错误是No such file or directory: '/dev/dsp'。
我错过了什么?如何从声音设备读取和写入原始字节,以及如何选择要使用的字节?
这个脚本是围绕 PulseAudio 的简单 API 的一个薄包装。它允许您将示例写入默认输出:
#!/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)
Run Code Online (Sandbox Code Playgroud)
速率 (44100) 定义了实时一秒内有多少样本。它需要 0-255 范围内的字节,该范围由 PA_SAMPLE_U8 定义(例如,相当于 Audacity 所示的“无符号 8 位”)。如果您有多个通道,则每个通道都需要交替采样。因此,一秒钟的噪声每个通道有 44100 个样本 = 88200 个样本,其中(模 2 = 0)样本用于左声道。
请注意,此脚本仅在 Python 3 上运行
| 归档时间: |
|
| 查看次数: |
2270 次 |
| 最近记录: |