如何使用 .wav 文件生成随机数?

如何使用 .wav 文件生成随机数?

我想使用仅含有静态噪声的.wav 文件生成一定范围内(1 到 26)的随机数。

结果需要可重复。

Windows 7 中是否有任何服务/程序/方法可以实现此目的?

答案1

尝试 Pythonscipy模块

import scipy.io.wavfile as sio

data = sio.read(FILENAME)
data = data[1].astype('float')
data -= data.min()
data *= 25.0*data.max()
data += 1

数据现在是一个向量,可以保存或用于进一步处理等。

例如,如果你只想将输出保存为 csv(逗号分隔值)文件,则可以使用

import csv
fout = open('output.csv', 'w')
wrt = csv.writer(fout)
wrt.writerow(data)
fout.close()

答案2

我使用 AM 无线电波或俗称的白噪声创建了真正的随机数文件。我在 Linux 中完成了这项工作,因此如果您想要这样做,请按照以下步骤操作。

  1. 使用具有 AM 功能的收音机。
  2. 将频率置于无线电频道之间的某个位置 - 您应该会得到来自无线电波和其他磁干扰的白噪声。
  3. 使用 Linux 发行版(基于 Debian/RedHat)- 我使用过 Ubuntu。
  4. 安装“sox”(捆绑)应用程序,其中有一个名为“rec”的小应用程序供您使用。
  5. 安装 sox 后,将麦克风放在扬声器上,以便它们可以录制“白噪音”,然后使用此命令:

    rec -c 1 -r 8000 -t wav -e signed-integer randomWAVfile
    

简而言之:

  • -c 1(您正在使用一个频道)
  • -r 8000(采样率为 8000 Hz)
  • -t wav (将文件格式化为 wav)
  • -e 有符号整数(同时读取 16 位)
  • randomWAVfile(文件名 - 根据个人喜好)

您将得到一个带有随机噪声的文件,该文件被“格式化”为 wav 文件(它包含 14 位的 wav 标头 - 如果我没记错的话)。

要剥离标题并“删除”潜在的重复项,请使用 Rick Van Reinn 用 C 语言编写的这个程序。

这不是一个大问题,但请注意,该程序中的转换不正确,并且你的 gcc 将开始抱怨。

源代码链接: Openfortress 源代码

通过程序推送文件:

cat randomWAVfile | ./noise-filter > randomBits

您将获得 TRNG 文件。

我通过此链接了解到了这一点。唯一不同的是,创建原始教程的人使用的是旧版 Linux,该版本使用 OSS(开放声音系统)而不是 alsa 进行操作。

原始帖子: Openfortress 原文链接

答案3

如果文件是 PCM 编码的,那么您可以使用 Python 的wave模块读取文件中的样本,然后将值折叠到范围内。

相关内容