标签: wave

在 Windows 上播放任意声音?

例如,我如何在 Windows(32 位和 64 位,最高为 Windows 7)上以给定的幅度和给定的频率构成(例如,由 2 kHz 和 3 kHz 的频率组成)播放声音?

(本机我的意思是不使用外部库。)

我相信这需要waveOutWrite方法,但我不知道它是如何工作的。

audio winapi wave

6
推荐指数
1
解决办法
1705
查看次数

使用python向wav文件添加静音帧

第一次在这里发帖,让我们看看这是怎么回事。

我试图用 python 编写一个脚本,它会在 wav 文件的开头添加一秒钟的静音,但到目前为止没有成功。

我试图做的是在 wav 标头中读取,然后使用 wave 模块在开头添加一个 \0 ,但这并不能很好地工作。这是基于这里的代码http://andrewslotnick.com/posts/audio-delay-with-python.html

import wave
from audioop import add

def input_wave(filename,frames=10000000): #10000000 is an arbitrary large number of frames
    wave_file = wave.open(filename,'rb')
    params=wave_file.getparams()
    audio=wave_file.readframes(frames)
    wave_file.close()

    return params, audio

#output to file so we can use ipython notebook's Audio widget
def output_wave(audio, params, stem, suffix):
    #dynamically format the filename by passing in data
    filename=stem.replace('.wav','_{}.wav'.format(suffix))
    wave_file = wave.open(filename,'wb')
    wave_file.setparams(params)
    wave_file.writeframes(audio)

# delay the audio
def delay(audio_bytes,params,offset_ms):
    """version 1: delay after 'offset_ms' …
Run Code Online (Sandbox Code Playgroud)

python audio wave audio-processing

6
推荐指数
1
解决办法
7363
查看次数

使用Naudio将每个WAV通道保存为单通道WAV文件

我正在尝试将WAV文件(PCM,48kHz,4通道,16位)转换为单通道WAV文件.

我尝试将WAV文件拆分成4个字节数组,就像这个答案一样,并创建了一个WaveMemoryStream,如下所示,但不起作用.

byte[] chan1ByteArray = new byte[channel1Buffer.Length];
Buffer.BlockCopy(channel1Buffer, 0, chan1ByteArray, 0, chan1ByteArray.Length);
WaveMemoryStream chan1 = new WaveMemoryStream(chan1ByteArray, sampleRate, (ushort)bitsPerSample, 1);
Run Code Online (Sandbox Code Playgroud)

我在创建WAVE标题时遗漏了什么?或者更多的是将WAV分成单声道WAV文件?

c# audio waveform naudio wave

5
推荐指数
1
解决办法
3669
查看次数

绘制波动方程

我一直在尝试在 Matlab 中绘制平面波动方程。我试图绘制 $(1/R)E^i(kR+wT)$ 的实部,即 $(1/R)cos(kR+wT)$。所以我在 Matlab 中使用了以下代码(对于一个瞬间,比如 t=5),

x=-5:0.1:5;
y=-5:0.1:5;

t=5;

w=1.3;
k=1.3;

[X,Y]=meshgrid(x,y);
R=(X.^2+Y.^2)^1/2;
u=20*cos(k*R+w*t);
surf(X,Y,u);
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我得到以下曲面图: 在此处输入图片说明 正如人们所期望的那样,我认为这看起来不错。但是如果我将波数和角频率因子增加到 15,我会得到以下结果: 在此处输入图片说明 它似乎是一种干扰模式,但我不知道为什么我会得到这个,因为我没有加入干扰效果。谁能解释这里发生了什么?

我真正想做的是绘制一个函数,用于径向向外移动的球面波(在表面上,如水面),以便在我的课堂上进行演示。我怎样才能把它变成一个动画,显示波浪从点源移出?

谢谢你的帮助

matlab wave

5
推荐指数
1
解决办法
8475
查看次数

求解 WAV 文件中的幅度和频率

我也问过这个位置 上的音响设计论坛,但问题是沉重的计算机科学/数学所以它可能实际上属于在这个论坛:

因此,通过读取文件中的二进制文件(不幸的是,这正是我正在寻找的内容),我能够成功找到有关 WAV 文件的所有信息,但大罪函数的幅度和频率(赫兹)除外。只是为了验证我在说什么,该文件仅使用以下方程生成一个波:

F(s) = A * sin(T * s)

其中 s 是当前样本,A 是幅度,T 是周期。现在 T(周期)的方程是:

T = (2? * Hz) /(? * ?)

其中Hz是以赫兹为单位的频率,?是每秒采样数,而 ? 是频道数量。

现在我知道要解决振幅,我可以简单地找到 F(s) 的值,其中

s = (?/2)/T

因为那时正弦函数的值将是 1,最终值将等于 A。问题是要除以 T,我必须知道赫兹(或赫兹)。

有什么方法可以读取 WAV 文件以从数据中发现赫兹,假设文件只包含一个波。

c# math waveform wav wave

5
推荐指数
1
解决办法
1836
查看次数

使用Python、Numpy数组和WAVE模块编写WAV文件

我正在尝试实现 Karplus-Strong 算法。

当我播放(通过 Jupyter Notebook 使用Audio(y,rate=Fs))收集的 numpy 数组(代表吉他协奏曲)时,一切看起来都很好。

不幸的是,使用 WAVE 模块将 numpy 数组:y写入 wav 文件是不正确的(使用下一个 python 代码):

noise_output = wave.open('k-s.wav', 'w')
noise_output.setparams((1, 4, Fs, 0, 'NONE', 'not compressed'))

for i in range(0, len(y)):
     value = y[i]
     packed_value = struct.pack('f', value)
     noise_output.writeframes(packed_value)

noise_output.close()
Run Code Online (Sandbox Code Playgroud)

y的每个元素是

<type 'numpy.float64'>
Run Code Online (Sandbox Code Playgroud)

我应该如何修改写入循环才能正确写入WAV文件?

有关该问题的更多信息。在写入 WAV 之前,y 数组的第一个元素是:

 [ 0.33659756  0.33659756 -0.43915295 -0.87036152  1.40708988  0.32123558
-0.6889402   1.9739982  -1.29587159 -0.12299964  2.18381762  0.82228042
 0.24593503 -1.28067426 -0.67568838 -0.01843234 -1.830472    1.2729578
-0.56575346  0.55410736]
Run Code Online (Sandbox Code Playgroud)

将元素写入 WAV 文件后,关闭 WAV …

python numpy wave

5
推荐指数
2
解决办法
3万
查看次数

我的程序将音乐速度降低了50%,但仅限于一个频道

我在python中使用wave库试图将音频速度降低50%.我成功了,但只有在正确的渠道.在左声道中,它是一大堆静态的.

import wave,os,math
r=wave.open(r"C:\Users\A\My Documents\LiClipse Workspace\Audio 
compression\Audio compression\aha.wav","r")
w=wave.open(r"C:\Users\A\My Documents\LiClipse Workspace\Audio 
compression\Audio compression\ahaout.wav","w")
frames=r.readframes(r.getnframes())
newframes=bytearray()
w.setparams(r.getparams())
for i in range(0,len(frames)-1):
    newframes.append(frames[i])
    newframes.append(frames[i])
w.writeframesraw(newframes)
Run Code Online (Sandbox Code Playgroud)

为什么是这样?既然我只是复制和粘贴原始数据,我肯定无法生成静态?编辑:我一直在寻找年龄,我终于找到了一个有用的波形格式资源:http://soundfile.sapp.org/doc/WaveFormat/ 如果我想保留立体声,看起来我需要复制实际样本宽度为4倍.这是因为有两个通道,它们占用4个字节而不是2个.

`import wave
r=wave.open(r"C:\Users\A\My Documents\LiClipse Workspace\Audio 
compression\Audio compression\aha.wav","r")
w=wave.open(r"C:\Users\A\My Documents\LiClipse Workspace\Audio 
compression\Audio compression\ahaout.wav","w")
frames=r.readframes(r.getnframes())
newframes=bytearray()
w.setparams(r.getparams())
w.setframerate(r.getframerate())
print(r.getsampwidth())
for i in range(0,len(frames)-4,4):
    newframes.append(frames[i])
    newframes.append(frames[i+1])
    newframes.append(frames[i+2])
    newframes.append(frames[i+3])
    newframes.append(frames[i])
    newframes.append(frames[i+1])
    newframes.append(frames[i+2])
    newframes.append(frames[i+3])
w.writeframesraw(newframes)`
Run Code Online (Sandbox Code Playgroud)

编辑2:好吧我不知道是什么驱使我这样做但我已经享受它给我的自由了.我选择将wav文件复制到内存中,直接编辑副本,然后将其写入输出文件.我对结果非常满意.我可以导入一个wav,重复一次音频,并将其写入输出文件,仅需0.2秒.使用wav插件,使用我的旧代码将速度降低一半现在只需要9秒而不是30秒以上这里是代码,仍然有点未优化我想但它比它更好.

import struct
import time as t
t.clock()
r=open(r"C:/Users/apier/Documents/LiClipse Workspace/audio editing 
software/main/aha.wav","rb")
w=open(r"C:/Users/apier/Documents/LiClipse Workspace/audio editing 
software/main/output.wav","wb")
rbuff=bytearray(r.read())
def replacebytes(array,bites,stop):
    length=len(bites)
    start=stop-length
    for …
Run Code Online (Sandbox Code Playgroud)

python wave

5
推荐指数
1
解决办法
69
查看次数

在 Python 中维护流式麦克风输入

我正在使用 Python 从我的笔记本电脑流式传输麦克风输入。我目前正在使用 PyAudio 和 .wav 创建 2 秒批次(代码如下),然后在循环中读出新创建的 .wav 文件的帧表示。

不过,我真的只想np.ndarray在代码中用“信号”表示,即 .wav 文件的 Int16 表示形式。有没有办法完全绕过写入 .wav 并使我的应用程序看起来是“实时”而不是微批处理?

import pyaudio
import wave

#AUDIO INPUT
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 1024
RECORD_SECONDS = 2
WAVE_OUTPUT_FILENAME = "output.wav"

audio = pyaudio.PyAudio()

# start Recording
stream = audio.open(format=FORMAT, channels=CHANNELS,
                rate=RATE, input=True,
                frames_per_buffer=CHUNK)
while(1):
  print "recording"
  frames = []
  for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
      data = stream.read(CHUNK)
      frames.append(data)
  waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb') …
Run Code Online (Sandbox Code Playgroud)

python wave pyaudio

5
推荐指数
1
解决办法
1万
查看次数

加入 .wav 文件而无需在 Python 中写入磁盘

我有一个二进制格式的 .wav 文件列表(它们来自 websocket),我想将其加入单个二进制 .wav 文件中,然后用它进行语音识别。我已经能够使用以下代码使其工作:

audio = [binary_wav1, binary_wav2,..., binary_wavN] # a list of .wav binary files coming from a socket
audio = [io.BytesIO(x) for x in audio]

# Join wav files
with wave.open('/tmp/input.wav', 'wb') as temp_input:
    params_set = False
    for audio_file in audio:
        with wave.open(audio_file, 'rb') as w:
            if not params_set:
                temp_input.setparams(w.getparams())
                params_set = True
            temp_input.writeframes(w.readframes(w.getnframes()))

# Do speech recognition
binary_audio = open('/tmp/input.wav', 'rb').read())
ASR(binary_audio)
Run Code Online (Sandbox Code Playgroud)

问题是我不想将文件写入'/tmp/input.wav'磁盘。有没有办法在不向磁盘写入任何文件的情况下做到这一点?

谢谢。

python wave python-3.x

5
推荐指数
2
解决办法
1887
查看次数

将数据附加到波形声音文件而不加载其当前内容

我正在尝试将数据附加到声音文件而不加载其内容(因为它可能有千兆字节的数据),我目前正在使用 pysoundfile 库,我已经找到了一种方法来为 wave64 做到这一点,但是在 wav 中,由于某种原因它抛出一个错误。

根据 pysoundfile 文档,当使用文件描述符打开 SoundFile 时,它​​应该在不截断的情况下写入,所以这就是我当前正在做的事情

    fd = open('foo.wav',mode='ab')
    with sf.SoundFile(fd, mode = 'w', samplerate = self._samplerate,channels = self._channels, format = 'wav') as wfile:
        wfile.seek(0,sf.SEEK_END)
        wfile.write(self._samples)
        wfile.close()
    fd.close()
Run Code Online (Sandbox Code Playgroud)

当我使用 Wave 文件类型时,出现以下错误:

RuntimeError: Error opening <_io.BufferedWriter name='../datasets/emddf_clean/qcoisa.wav'>: Unspecified internal error.
Run Code Online (Sandbox Code Playgroud)

但是对于 w64 格式的文件来说,它可以以某种方式工作...如果有人可以阐明我,那将是惊人的,提前致谢!

python audio wave

5
推荐指数
1
解决办法
1270
查看次数

标签 统计

wave ×10

python ×6

audio ×4

c# ×2

waveform ×2

audio-processing ×1

math ×1

matlab ×1

naudio ×1

numpy ×1

pyaudio ×1

python-3.x ×1

wav ×1

winapi ×1