对于我正在进行的项目,我希望能够连接多个 .wav 文件。
通过我的研究,我能够想出这段代码:
File sample1 = new File("F:\\Programming\\Resources\\Java_Sound\\trumpet1.wav");
File sample2 = new File("F:\\Programming\\Resources\\Java_Sound\\trumpet2.wav");
File fileOut = new File("F:\\Programming\\Resources\\Java_Sound\\Test.wav");
AudioInputStream audio1 = AudioSystem.getAudioInputStream(sample1);
AudioInputStream audio2 = AudioSystem.getAudioInputStream(sample2);
AudioInputStream audioBuild = new AudioInputStream(new SequenceInputStream(audio1, audio2), audio1.getFormat(), audio1.getFrameLength() + audio2.getFrameLength());
//for(int i = 0; i < 5; i++){
// audioBuild = new AudioInputStream(new SequenceInputStream(audioBuild, audio2), audioBuild.getFormat(), audioBuild.getFrameLength() + audio2.getFrameLength());
//}
AudioSystem.write(audioBuild, AudioFileFormat.Type.WAVE, fileOut);
Run Code Online (Sandbox Code Playgroud)
它可以很好地组合两个 .wav 文件,但是当我取消注释 for 循环时,生成的 .wav 文件仅播放第一个串联的音频。音轨似乎提前结束,因为 wmp 的持续时间条仅在屏幕上移动了大约 1\5。
我假设问题出在创建的 .wav 文件中的标头。我研究了许多不同的网页,讨论如何构建标头,但它们的定义都略有不同,但都说标头应该是十六进制的。当转换流(不是音频流,标准 FileInputStream)时,我的标头是十进制的。另外,在 RIFF 部分之后、WAVE 部分之前,应该是整个文件的大小,不包括前 8 个字节。然而我的一些包含连字符。老实说我不知道这些是什么意思。然而,忽略它们,取消上面代码的注释后测试文件的大小仍然是一个更大的数字。 …
我是 Python 的新手,但我正在研究它作为 DSP 的编程语言。我录制了一个 wav 文件,并一直尝试使用IPython.display.Audio以下方法播放它:
import IPython.display
from scipy.io import wavfile
rate, s = wavfile.read('h.wav')
IPython.display.Audio(s, rate=rate)
Run Code Online (Sandbox Code Playgroud)
但这会产生以下错误:
struct.error: ushort 格式需要 0 <= number <= 0xffff

我尝试安装 FFmpeg,但没有帮助。
我想知道如何使用 ffmpeg 来实现声音被完全破坏的扬声器效果。
我在 ffmpeg 上尝试了一堆不同命令的组合,我得到的最接近的是以下(我使用超级均衡器,然后使音量超高):
import ffmpeg
(
ffmpeg
.input('shark.wav')
.filter("superequalizer", 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20)
.filter("volume", 10)
.output('output_speaker.wav')
.run()
)
Run Code Online (Sandbox Code Playgroud)
我正在使用 python 包装器,但这是等效的命令行:
ffmpeg -i shark.wav -af "superequalizer=1b=20:2b=20:3b=20:4b=20:5b=20:6b=20:7b=20:8b=20:9b=20:10b=20:11b=20:12b=20:13b=20:14b=20:15b=20:16b=20:17b=20:18b=20,volume=10" output_speaker.wav
Run Code Online (Sandbox Code Playgroud)
上述问题是,它对声音还不是很大的文件(例如录制的音频)没有任何作用,并且大多数时候音频实际上只是最终被削波,然后变得超级柔和。
有人对如何实现这种效果有建议吗?谢谢!
我有一个字符串,它是 Base64 编码和 wav 格式的音频记录(我有数据链接 - {{vm.record}})。我需要在小部件(用 js + html 编写)中添加音频播放器来向我播放音频
我不明白为什么它不起作用?我必须在 js 中编写才能开始工作吗?我在哪里可以写关于编码的文章?
<div layout = "row">
<audio
controls
src={{vm.record}} type="audio/wav; base64" autobuffer="autobuffer" autoplay="autoplay">
Your browser does not support the
<code>audio</code> element.
</audio>
</div>
Run Code Online (Sandbox Code Playgroud)
我知道这是错误的“type=”audio/wav; base64”但是怎么样?我尝试了这个,但它也不起作用
<audio controls src="data:audio/ogg;base64,T2dnUwACAAAAAAAAAAAfm5nB6slBlZ3Fcha363d5ut7u3ni1rLoPf728l3KcK"/>
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用下面显示的以下函数来清理和缩减音频采样。我陷入了这个我缺乏理解的错误。有人愿意解释一下并希望帮助我解决这个问题吗?
我可以看到它与 wavio 功能有关,并且无法读取文件。
代码如下:
def envelope(y, rate, threshold):
mask = []
y = pd.Series(y).apply(np.abs)
y_mean = y.rolling(window=int(rate/20),
min_periods=1,
center=True).max()
for mean in y_mean:
if mean > threshold:
mask.append(True)
else:
mask.append(False)
return mask, y_mean
def downsample_mono(path, sr):
obj = wavio.read(path)
wav = obj.data.astype(np.float32, order='F')
rate = obj.rate
try:
tmp = wav.shape[1]
wav = to_mono(wav.T)
except:
pass
wav = resample(wav, rate, sr)
wav = wav.astype(np.int16)
return sr, wav
def save_sample(sample, rate, target_dir, fn, ix):
fn = fn.split('.wav')[0]
dst_path = os.path.join(target_dir.split('.')[0], fn+'_{}.wav'.format(str(ix))) …Run Code Online (Sandbox Code Playgroud) 我正在尝试用 arduino 构建一个录音机。现在,该设置有一个麦克风,记录输入并输出到 Arduino uno 的模拟输入。
如何将(时间戳、数据)读数转换为 .WAV?我知道有更多的库可以做到这一点,但我试图了解 .WAV 的结构,并希望能够在 C\C++ 中自己编写脚本。
感谢您的关注!
我正处于用Java编写小型音乐/节奏游戏的早期阶段(通过Slick框架,它依次使用OpenAL,但这可能与此无关).游戏需要以WAV格式读取(和播放)几个声音文件,但有些文件会抛出[javax.sound.sampled.UnsupportedAudioFileException]异常.
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1102)
at org.newdawn.slick.openal.WaveData.create(WaveData.java:123)
at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:713)
at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:683)
at org.newdawn.slick.Sound.<init>(Sound.java:33)
Run Code Online (Sandbox Code Playgroud)
这些文件可以在Winamp或Foobar2000中播放得很好,所以这意味着Java只是不识别文件格式的某些变体.此时我有什么选择?
注意:有问题的文件是用户提供的,所以我不能事先转换它们(使用像audacity这样的东西).任何转换步骤都必须在运行时完成.
下面是我的代码我无法播放SnareHitSample.wav文件.我不知道我哪里出错了.
-(void)playAudioFiles
{
NSString * path;
AVAudioPlayer * snd;
NSError * err;
NSString *name;
name = @"SnareHitSample.wav";
path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:name];
if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
NSURL * url = [NSURL fileURLWithPath:path];
snd = [[AVAudioPlayer alloc] initWithContentsOfURL:url
error:&err] ;
if (! snd) {
NSLog(@"Sound named '%@' had error %@", name, [err localizedDescription]);
} else {
[snd prepareToPlay];
}
} else {
NSLog(@"Sound file '%@' doesn't exist at '%@'", name, path);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个应用程序,它应该将一个浮点数组写入WAVE文件.我正在使用QDataStream,但这导致输出非常不可能,我无法解释.看起来QDataStream有时会选择32位浮点数,有时候会选择40位浮点数.这会弄乱整个输出文件,因为它必须遵守严格的格式.
我的代码大致如下所示:
float* array;
unsigned int nSamples;
void saveWAV(const QString& fileName) const
{
QFile outFile(fileName);
if (outFile.open(QIODevice::WriteOnly | QIODevice::Text))
{
QDataStream dataStream(&outFile);
dataStream.setByteOrder(QDataStream::LittleEndian);
dataStream.setFloatingPointPrecision(QDataStream::SinglePrecision);
// ... do all the WAV file header stuff ...
for(int ii = 0; ii < nSamples; ++ii)
dataStream << array[ii];
}
}
Run Code Online (Sandbox Code Playgroud)
我认为没有理由说这个代码会产生这样的副作用.所以我做了一个最小的例子来找出发生了什么.我用这个替换了for循环:
float temp1 = 1.63006e-33f;
float temp2 = 1.55949e-32f;
dataStream << temp1;
dataStream << temp1;
dataStream << temp2;
dataStream << temp1;
dataStream << temp2;
Run Code Online (Sandbox Code Playgroud)
然后我用Matlab打开输出文件,看看写入文件的字节.那些是:
8b 6b 07 09 // this is indeed …Run Code Online (Sandbox Code Playgroud) 我正在用语言C制作一个基于文本的冒险游戏.我正在使用CodeBlocks,游戏将是一个控制台应用程序.
是否有可能在节目中加入"背景音乐"?这将使游戏更加吸引人.
我只知道音乐应该是.wav格式.但我只发现了针对这个问题的C#和C++解决方案(而且C++解决方案是YouTube上的视频质量非常差).
那么,如果有可能在C中,那么有人可以告诉我该怎么做吗?
这将不胜感激!(另外,我希望音乐重播自己,因为它只有2分钟,但我希望它能在程序运行时反复播放).
我在这里先向您的帮助表示感谢!