我使用Ubuntu 22.04
。是否有应用程序可以将数学周期sin/cos
公式(函数)转换为声音?例如,是否有办法播放这些信号:
cos(2π · 440 t)
cos t + cos 2^(1/2) t
特征:
- 我只寻找免费的应用程序。
笔记:
- 我已经在我的计算机上安装了
FFmpeg version 4.4.2
,并且GNU Octave, version 6.4.0
描述了如何使用它们来实现我的目的的说明或网页是可以接受的。
答案1
- 创建一个包含公式“样本”的文件。
简单的“C”或 Python 脚本就可以完成此操作,除非 Octave 本身有此方法。 - 安装
Audacity
- 菜单:文件 > 导入 > ...您的示例文件。
一些可供玩的 Python 代码......
$ cat rawsnd.py
#!/bin/env python
import math, sys
# trick to make CSI, ESC[ - sequences work in Windows-stupid-CMD.EXE to activate "ANSI.SYS" (as in old MS-DOS)
import os;os.system("");CSI='\x9B' # terminfo, curses, "ANSI" terminal expected
sps=44100 # sample rate, 44100 for "CD"-like
et=10 # end time, seconds
res=2**16-10 # max value for samples, UNSIGNED, < base-two-binary-max.
halfres=(res)/2 # adjust for SIGNED, Because*sin()/cos() [-1,1]
pi=3.141592653589793
Hz=440 # base frequency, at least for simple cos or sin
top=-1
bot=1
length = math.ceil(math.log(res, 256)) # bytes per sample
sys.stderr.write(str(length)+' bytes /sample\n\n')
f=open('TEST.raw','wb')
for t in range(int(et*sps)): # "t" in "samples"
timespot=Hz*t/sps
#
#> cos t + cos 2^(1/2) t # note: cos()+cos() may reach [-2,2], so scaled to half.
#s=int(( math.cos( 2*pi*timespot )+math.cos(1.414*timpespot) )/2*halfres)
#
#> cos(2π · 440 t)
s=int(math.cos( 2*pi*timespot )*halfres)
#
print(f'{CSI}A{s}{CSI}K')
if s>top:
top=s
elif s<bot:
bot=s
f.write( int.to_bytes(s, length=length, byteorder='big', signed=True) )
print(f'{CSI}AValues: top; {top}, bottom; {bot}{CSI}J')