将数学信号转换为声音的推荐应用程序

将数学信号转换为声音的推荐应用程序

我使用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

  1. 创建一个包含公式“样本”的文件。
    简单的“C”或 Python 脚本就可以完成此操作,除非 Octave 本身有此方法。
  2. 安装Audacity
  3. 菜单:文件 > 导入 > ...您的示例文件。

一些可供玩的 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')

相关内容