0

好的,所以上周我一直在努力解决这个问题。

当您将鼠标悬停在 2 个单独的图像/标签上时,我需要播放声音。如果您很快将光标放在两个图像/标签上,声音需要播放两次并且能够相互重叠,它不能等待第一个声音停止播放第二个声音。此外,两个图像/标签都需要从存储在我的 AppData 中的同一个 .WAV 音频文件中提取,这意味着它需要播放同一个 .WAV 文件,但是需要多次播放,并且根据您移动的速度尽可能多地重叠将光标悬停在图像/标签上。

我已经尝试了以下所有方法。

DirectX.AudioVideoPlayback 函数使用 DIM 中的文件路径。DirectX.DirectSound 函数。(不记得我尝试过的所有方法)。Media.SoundPlayer 函数的路径存储在“player.SoundLocation = "PATH" 中,就在您调用该行为播放文件之前。My.Computer.Audio.Play("PATH")。

我已经尝试过 mciSendString,我尝试过多次将播放代码封装在一个线程(Threading.Thread(AddressOf NewSub))中......我玩过背景声音......

请!如果有人能帮忙,我会想办法报答你。

谢谢!!

4

2 回答 2

0

您可以使用 mciSendString 实现多个声音同时播放,只需使用不同的声音名称即可。让声音在稍后触发时与自身重叠。Yo 可能会使用不同的声音名称加载相同的声音,这可能需要一些设计。目前,MCISendString 仅支持一个 MIDI 音序器播放,同时播放多个 wav/mp3 声音。mciSendString 的一个缺点是它的文件名长度有限(<?256 字节左右)。这在现代win10中将是一个问题,它通常将应用程序安装在路径很长的深层目录中。如果是这种情况,您可以使用目录深度较浅的特殊目录。

于 2021-01-23T18:08:30.237 回答
0

通过使用 BASS.Net(Bass 的 .net 包装器),您只需使用以下代码即可同时播放数百种声音:首先您初始化低音

Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, System.IntPtr.Zero)

然后你声明它流的一个整数名称,这是你将用来控制流的名称。

    Dim stream As Integer

现在您需要将文件加载到流中

 stream = Bass.BASS_StreamCreateFile(FILELOCATION, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT)

如果你想循环流,你可以使用它

 If (Bass.BASS_ChannelFlags(stream, BASSFlag.BASS_DEFAULT, BASSFlag.BASS_DEFAULT) And BASSFlag.BASS_SAMPLE_LOOP) = BASSFlag.BASS_SAMPLE_LOOP Then
            ' loop flag was set, so remove it
            Bass.BASS_ChannelFlags(stream, BASSFlag.BASS_DEFAULT, BASSFlag.BASS_SAMPLE_LOOP)
        Else
            ' loop flag was not set, so set it
            Bass.BASS_ChannelFlags(stream, BASSFlag.BASS_SAMPLE_LOOP, BASSFlag.BASS_SAMPLE_LOOP)
        End If

要控制流使用这些: 要播放Bass.BASS_ChannelPlay(stream, False)注意第二个参数(布尔值)用于使流从乞求播放或恢复播放暂停Bass.BASS_ChannelPause(stream) 到停止Bass.BASS_ChannelStop(stream)

如果您需要进一步的帮助,请询问我,我在使用 Bass.net 时拥有丰富的经验 ^^

如果我的回答确实对您有所帮助,请不要忘记将其标记为答案,以便对整个社区有所帮助;)

于 2020-07-07T22:52:36.357 回答