我在SoX中使用以下命令在每个静默时间超过0.3秒的地方分割许多大型音频文件:
sox -V3 input.wav output.wav silence 1 0.50 0.1% 1 0.3 0.1% : newfile : restart
Run Code Online (Sandbox Code Playgroud)
然而,这有时会在每次休息之前偶尔创建完全静音的文件并修剪音频.
我在Audacity中找到了更好的结果,但我需要分割数百个WAV文件,Audacity甚至无法同时打开10个文件而不会冻结.
如何在0.3秒的静音期结束时使用SoX或类似软件分割文件,这样静音部分仍然贴在说话结束时,但之前没有,并且没有完全静音的剪辑,除非他们从一开始就来input.wav
?
我在使用SoundPool时遇到问题,因为它拒绝使用我的.ogg文件.我收到此错误:
AudioFlinger无法创建曲目,状态:-12
创建AudioTrack时出错
我找到了一个关于这个问题的线索,(可能的)答案是:
是这样的吗?(有人请确认或取消)
如果是 - 使用哪个应用程序(Audacity不支持.ogg自定义导出设置).
如果不是 - 还有什么可能是错的?
作为旁注 - 在我使用MediaPlayer之前,但现在我想播放一些并行的声音.
我正在使用FFT从音频文件中提取每个频率分量的幅度.实际上,Audacity中已经有一个名为Plot Spectrum的函数可以帮助解决问题.以3kHz正弦和6kHz正弦组成的音频文件为例,频谱结果如下图所示.你可以看到峰值在3KHz和6kHz,没有额外的频率.
现在我需要实现相同的功能并在Python中绘制类似的结果.我在帮助下接近Audacity结果,rfft
但在得到这个结果后仍然有问题需要解决.
相关代码:
import numpy as np
from pylab import plot, show
from scipy.io import wavfile
sample_rate, x = wavfile.read('sine3k6k.wav')
fs = 44100.0
rfft = np.abs(np.fft.rfft(x))
p = 20*np.log10(rfft)
f = np.linspace(0, fs/2, len(p))
plot(f, p)
show()
Run Code Online (Sandbox Code Playgroud)
更新
我将Hanning窗口与整个长度信号相乘(这是正确的吗?)并得到它.裙子的大部分幅度都低于40.
并按照@Mateen Ulhaq的说法将y轴缩放为分贝.结果更接近Audacity one.我可以将低于-90dB的幅度处理得如此之低以至于可以忽略吗?
更新的代码:
fs, x = wavfile.read('input/sine3k6k.wav')
x = x * np.hanning(len(x))
rfft = np.abs(np.fft.rfft(x))
rfft_max = max(rfft)
p = 20*np.log10(rfft/rfft_max)
f = np.linspace(0, fs/2, len(p))
Run Code Online (Sandbox Code Playgroud)
关于赏金
通过上面更新中的代码,我可以用分贝测量频率分量.最高可能值为0dB.但该方法仅适用于特定的音频文件,因为它使用rfft_max
此音频.我想像Audacity那样在一个标准规则中测量多个音频文件的频率成分. …
因此,我在一个学校项目中工作,必须处理较大的wav文件(> 250Mgb),我想知道为什么当我向audacity软件读取此类文件时,要花大约40秒钟才能读取和绘制,但是当使用script.io.wavfile.read将其读取到python时,它将永远持续下去。所以我的问题是,胆量软件如何使它这么快,这是我可以在python中做到的吗?
编辑:我在我的代码中添加了一个新部分,以计算和绘制WAV文件的包络,但是问题是尝试使用大型WAV文件时,这将花费数年时间。文件更快谢谢
这是我正在使用的代码:
import matplotlib.pyplot as plt
import numpy as np
from scipy.io.wavfile import read
from tkinter import filedialog
# Browse, read the signal and extract signal informations (fs, duration)
filename = filedialog.askopenfilename(filetypes = (("""
Template files""", "*.wav"), ("All files", "*")))
fs, data = read(filename, mmap=True)
T = len(data) / fs #duration
nsamples = T * fs #number of samples
time = np.linspace(0, T, nsamples)
# Compute the envelope of the signal
from scipy.signal import hilbert, chirp, resample
analytic_signal …
Run Code Online (Sandbox Code Playgroud) 我想用语音数据增加缓冲区的音量.关键是我正在使用DirectSound,我有一个主缓冲区和一个辅助缓冲区 - 所有流混合都是手工完成的.在语音聊天中,所有参与者可以具有独立的音量级别.我将每个流数据乘以一个值(增益)并将其加到一个缓冲区.一切正常,但当我尝试将数据乘以大于1.0f的值时 - 我听到一些剪辑或什么.
我尝试过使用Audacity效果压缩器,但这无助于减少奇怪的噪音.
可能我应该以其他方式改变收益?或者只是使用另一种后处理算法?
更新:哇,我刚发现有趣的事情!在增加音量之前,我已经放弃了音频.
这是照片
对不起质量 - 我认为这应该是声音出现的方式(我自己画了红线).真的看起来像超过样本数据类型的值.但我无法理解为什么?我的samplebuffer是BYTE,但我只通过短指针访问它.它已签名但即使*ptr约为15-20万时也会发生剪辑.
我正在尝试修复一个围绕portmixer的Audacity错误.输出/输入级别可以使用mac版本的portmixer进行设置,但不能始终在Windows中进行设置.我正在调试portmixer的窗口代码,试图让它在那里工作.
使用IAudioEndpointVolume :: SetMasterVolumeLevelScalar设置主音量适用于板载声音,但使用专业外部USB或火线接口(如RME Fireface 400),输出音量不会改变,尽管它反映在该设备的Window声音控制面板中,还有系统调音台.
此外,在我们的程序之外,更改系统混音器的主滑块(在任务栏中)没有任何效果 - 声卡输出相同(完整)级别,而不管系统所处的级别如何.更改输出级别的唯一方法是使用硬件开发人员为卡提供的自定义应用程序.
IAudioEndpointVolume :: QueryHardwareSupport函数返回ENDPOINT_HARDWARE_SUPPORT_VOLUME,因此它应该能够执行此操作.
许多设备上的输入和输出都存在此行为.
这可能是Window的错误吗?
可以通过模拟(缩放)输出来解决这个问题,但这不是首选,因为它在功能上并不相同 - 更好的是让音频接口进行缩放(特别是如果它涉及前置放大器的输入).
Audacity有任何脚本库吗?
具体来说,我正在寻找一种方法来给它一个很长的mp3文件podcast.mp3
并将它分成几个文件,比如每个10分钟:podcast0.mp3, podcast1.mp3
等等......
我不想手动执行此操作,因为我想通过此脚本运行我收听的所有播客.
一些背景:
我听的各种播客(例如,Stackoverflow)非常长.我在我的手机上听这些,它有一个很小的MP3播放器,不允许我跳到文件中的任意时间.这个MP3播放器有一个讨厌的习惯,就是忘记文件中的位置.例如:
发生这种情况时,我必须手动快进或快退.这个矮小的玩家以5倍的速度快进,所以如果我在播客的中间,我可以花6到7分钟拿着快进按钮回到原来的位置.我想如果我将长播客分成较短的文件,我可以省去一些烦恼.
我制作了一个包含多个曲目和这些曲目上的多个剪辑的 Audacity 项目。现在我想在某个点添加暂停,但我不知道如何添加。在这一点之后手动移动每个轨道上的每个剪辑会非常痛苦,有其他选择吗?我在 Windows 10 上使用最新版本的 Audacity。
我希望这对 Audacity 来说不是一个错误的地方。
所以我想说我想混合这两个音轨:
在Audacity中,我可以使用"混合和渲染"选项将它们混合在一起,我会得到这个:
但是,当我尝试编写自己的代码混合时,我得到了这个:
这基本上就是我如何混合样本:
private function mixSamples(sample1:UInt, sample2:UInt):UInt
{
return (sample1 + sample2) & 0xFF;
}
Run Code Online (Sandbox Code Playgroud)
(语法是Haxe但如果你不知道它应该很容易理解.)
这些是8位样本音频文件,我希望产品也是8位,因此& 0xFF
.
我明白通过简单地添加样本,我应该期待削减.我的问题是混合使用Audacity不会导致剪辑(至少没有达到我的代码所做的程度),并且通过查看第二个(更长)轨道的"尾部",它似乎不会减小幅度.听起来也不软.
所以基本上,我的问题是:Audacity在做什么,我不是?我想把音轨混合起来,就好像它们是在彼此之上播放一样,但我(显然)不想要这种可怕的剪辑.
编辑:
如果我在添加之前对值进行签名,然后根据Radiodef的建议取消签署和值,这就是我得到的:
你可以看到它比以前好多了,但与Audacity产生的结果相比,它仍然非常扭曲和嘈杂.所以我的问题仍然存在,Audacity必须采取不同的做法.
EDIT2:
我将第一首曲目与我的代码和Audacity混合在一起,并比较了发生失真的点.这是Audacity的结果:
这是我的结果:
我有几百个口语讲座的音频文件.我需要一个可以从命令行调用的软件,以各种方式处理音频,例如更改格式,规范化等.
到目前为止,我已尝试使用Audacity批量处理文件,使用此视频中的chain
详细信息.但是,这并不令人满意,因为我无法从命令行调用它(因此可以灵活地批量处理文件以适应大小/文件类型等).
您是否能够指向可以从命令行执行此类音频处理的任何软件?
我有一个 mp3 文件。我想降低低音并增加高音。我在尝试:
ffmpeg -y -i original.mp3 -af "treble=g=10" test1.mp3
但它与Audacity->Effect->bass and treble的效果不同(增加高音和减少低音)
下面是来自audacity的图片:
我有一个音频文件,我用大胆分析,光谱看起来像:
我想和scilab一样,所以我运行这段代码:
[y,Fs] = wavread('fileName.wav');
Y_0 = abs(fft(y(1,:),-1));
plot(fftshift(Y_0));
Run Code Online (Sandbox Code Playgroud)
结果是:
我也尝试过这个:
plot(10*log10(fftshift(Y_0)));
Run Code Online (Sandbox Code Playgroud)
结果不同但仍然不同于大胆,任何想法怎么做?在此先感谢您的帮助!