gpt4 book ai didi

debian - Debian 9 上的 Perl 声音合成

转载 作者:行者123 更新时间:2023-12-02 22:25:34 25 4
gpt4 key购买 nike

如何在 Debian 9 上的 Perl 中生成声音?

自己研究过,发现不多。例如。 Audio::NoiseGen ,它存在依赖问题(即 Audio::PortAudio ,这又是旧的并且在我的 Debian 9 上不接受 portaudio-2.0 )。

我的意思是声音合成,而不是播放文件。最接近我正在寻找的是使用 system命令调用sox程序。但这是在 Perl 之外进行的,所以不是一个好的集成。我需要一个像 Perl 模块这样的好的模块。

最佳答案

音频只是一条曲线,因此使一个点上下摆动并以某个时间间隔进行采样的代码将合成音频(PCM格式的原始音频)......这里perl生成这样一条曲线

perl -e 'for ($c=0; $c<4*44100; $c++) {
$k=1*sin((1500+$c/16e1)*$c*22e-6); print pack "f", $k;
} ' |
sox -V -r 44100 -c 1 -b 32 -e floating-point -t raw - \
-c 2 -b 16 -t wav - trim 0 3 gain -1 dither |
tee test.wav |
aplay

perl 的输出通过管道传输到 sox 中,这实际上只是向 PCM 音频添加了一个 wav 格式的 header ……然后将 wav 文件传输到 tee 中,该 tee 输出一个 wav 文件,同时传输到渲染音频的 aplay ……为了其他安装所需的 debian (ubuntu) 软件包
sudo apt-get install sox alsa-utils

现在只需将上面的代码保存到文件中并获取它... vi somefile-with-above-code
source somefile-with-above-code

将音频合成过程与其声音渲染分开很方便,因此上述分工通常是合理的

或者,您可以使用 perl 合成原始音频并将其直接转储到文件中...只需将以下 perl 片段保存到文件中 vi my-audio-perl-file
perl -e 'for ($c=0; $c<4*44100; $c++) {
$k=1*sin((1500+$c/16e1)*$c*22e-6); print pack "f", $k;
} '

然后执行它将输出重定向到文件使用
source ./my-audio-perl-file  > synth_audio.pcm

然后使用 Audacity可视化和渲染 PCM 文件 ... 文件 -> 导入原始数据
-> Encoding -> 32 bit float 
-> Byte order -> Little-endian
-> Channels -> 1 Channel (Mono)

并点击 Import

关于debian - Debian 9 上的 Perl 声音合成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49193269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com