- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个 C# 项目可以为 RSS 提要播放摩尔斯电码。我使用 Managed DirectX 编写它,却发现 Managed DirectX 已过时且已弃用。我的任务是播放纯正弦波脉冲串,中间穿插着静默期(代码),这些静默期的持续时间是精确计时的。我需要能够调用一个函数来播放纯音这么多毫秒,然后 Thread.Sleep() 然后播放另一个,等等。最快时,音调和空格可以短至 40 毫秒。
它在 Managed DirectX 中运行良好。为了获得精确定时的音调,我创建了 1 秒。正弦波进入辅助缓冲区,然后播放一定持续时间的音调,我寻求在缓冲区结束后的 x 毫秒内播放,然后播放。
我试过 System.Media.SoundPlayer。这是一个失败者[编辑 - 请参阅下面我的回答] 因为您必须播放 ()、 sleep (),然后停止 () 以获得任意音调长度。结果是音调太长,因 CPU 负载而异。实际停止音调需要不确定的时间。
然后我开始冗长尝试使用NAudio 1.3 .我最终得到了一个提供音调数据的内存驻留流,并再次向前寻找,将所需长度的音调留在流中,然后播放。这在 DirectSoundOut 类上工作了一段时间(见下文)但 WaveOut 类很快就死了,内部断言说缓冲区仍在队列中,尽管 PlayerStopped = true。这很奇怪,因为我播放到最后,然后在音调结束和下一个音调开始之间等待相同的持续时间。您会认为在开始播放 40 毫秒的音调后 80 毫秒队列中没有缓冲区。
DirectSoundOut 工作了一段时间,但它的问题是对于每个音调 Play(),它都会分离出一个单独的线程。最终(5 分钟左右)它停止工作。在 VS2008 IDE 中运行项目时,您可以在“输出”窗口中看到线程一个接一个地退出。我在播放过程中不创建新对象,我只是 Seek() 音调流然后一遍又一遍地调用 Play(),所以我不认为这是孤立缓冲区的问题/任何堆积直到它被阻塞。
我对这个没有耐心,所以我想问一下,希望这里有人遇到过类似的要求,并能引导我找到可能的解决方案。
最佳答案
我不敢相信...我回到 System.Media.SoundPlayer 并让它做我想做的事...没有巨大的依赖库,其中有 95% 未使用的代码和/或等待被发现的怪癖:-)。
此外,它在 MacOSX 上运行在 Mono (2.6) 下!!!
[错误 - 没有声音,将提出单独的问题]
我使用 MemoryStream 和 BinaryWriter 来编写 WAV 文件,完成 RIFF header 和分 block 。不需要“事实” block ,这是 44100Hz 的 16 位样本。所以现在我有一个 MemoryStream,其中包含 1000 毫秒的样本,并由 BinaryReader 包装。
在 RIFF 文件中有两个 4 字节/32 位长度,“总”长度是流中的 4 个字节(在 ASCII 中“RIFF”之后),和一个“数据”长度就在样本数据字节。我的策略是在流中寻找并使用 BinaryWriter 改变两个长度来欺骗 SoundPlayer 认为音频流只是我想要的长度/持续时间,然后 Play() 它。下一次,持续时间不同,所以再次用 BinaryWriter、Flush() 覆盖 MemoryStream 中的长度,然后再次调用 Play()。
当我尝试这样做时,我无法让 SoundPlayer 看到流的变化,即使我设置了它的 Stream 属性。我被迫每 40 毫秒创建一个新的 SoundPlayer???没有。
好吧,我今天想回到那个代码并开始查看 SoundPlayer 成员。我看到了“SoundLocation”并阅读了它。那里说设置 SoundLocation 的副作用是使 Stream 属性为 null,对于 Stream 则反之亦然。所以我添加了一行代码将 SoundLocation 属性设置为伪造的“x”,然后将 Stream 属性设置为我的(刚刚修改的)MemoryStream。该死的,如果它没有拿起它并按照我的要求准确地播放音调。似乎没有任何疯狂的副作用,例如死后时间或增加内存力,或者???调整 WAV 流然后加载/启动播放器确实需要 1-2 毫秒,但它非常小而且价格合适!
我还实现了一个频率属性,它重新生成样本并使用 Seek/BinaryWriter 技巧以相同数量但频率不同的样本覆盖 RIFF/WAV MemoryStream 中的旧数据,然后再次执行相同操作振幅属性的东西。
This project is on SourceForge .您可以从 this page in the SVN browser 的 SPTones.CS 中获取此 hack 的 C# 代码.感谢所有提供这方面信息的人,包括@arke,他的想法与我很接近。我很感激。
关于c# - 如何产生精确定时的音调和静音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2725296/
是否有一些系统通知可供我订阅,以便在用户切换响铃/静音按钮时收到通知?我还想知道苹果是否提供了一些“系统通知列表”。我花了一个小时搜索这个但失败了。 最佳答案 没有办法找出这一点。苹果在回应一些请求时
我用 a-videosphere 制作了一个 a-scene。我尝试使用按钮启用/禁用声音,但有些想法不起作用?这是我的代码: var gargamel = 0; function
我正在寻找可以检测并让我知道1分钟的wav文件是否包含声音的实用程序/代码? 换句话说,如果它可以检测到wav文件中任何位置的静默持续时间(如果存在),则也可以达到目的。 SOX是否为此支持任何命令?
我想知道是否可以只使特定 窗口静音。例如,我打开了 Firefox 和另外两个窗口。我想将与 Firefox 相关的所有内容静音,但不想关闭计算机的全部声音。 这可能吗?如果可以,如何实现? 最佳答案
我不知道如何处理我的 JavaScript 中的静音/取消静音按钮,我已经处理这个问题好几个小时了!基本上我的静音按钮可以正常工作,它可以使视频静音,我现在正试图让同一个按钮取消视频静音。有任何想法吗
我正在尝试将 AVCaptureSession 的音频静音和取消静音。开始 session 后,我可以启用和禁用音频连接,但是一旦我播放视频,所有音频部分都会被推回视频的前面,只留下视频的结尾没有声音
我有一组 php/html 页面,其中包含当鼠标悬停在其上时会播放声音的按钮。现在我希望当用户单击另一个按钮时,它会使网站的所有页面静音或将它们置于声音中,具体取决于声音是否已打开。 我已经有一个 h
我正在使用 AudioServicesPlaySystemSoundWithCompletion 播放系统声音,并使用 AVAudioPlayer 播放自定义声音。 为什么打开静音开关会播放声音?我已
我正在使用名为 ExoPlayer 的 Google 新 MediaPlayer,但找不到静音的方法 有没有一种简单的方法可以在 Google ExoPlayer 上将音轨静音?还是改变音量? 最佳答
我收到了大量关于零时长和弦的 music21 警告: WARNING: midi chord with zero duration will be treated as grace 我尝试用以下内容覆
我正在尝试在后台启动端口转发,同时抑制所有输出。这是我尝试过的: kubectl port-forward pod-name 1234:1234 > /dev/null 2>&1 & 然而,当我发起连
我想继续录音,但音频已静音。我是 不是 希望暂停音频。 我现在的替代方法是暂停音频,加入静音填充,继续录音,但如果有更简单的方法,那就太好了。 最佳答案 我也遇到过这个问题,经过长时间的研究,我得到了
在我的 iPhone 应用程序中,我想要静音和取消静音 MPMoviePlayerController。我进行了很多搜索,但无法成功。是否可以在 MPMoviePlayer Controller 中将
我已经看到了确保应用程序遵循静音开关的技术,但是是否可以使用 SDK 将 iPhone 设置为静音(任何应用程序都不会发出声音)? 最佳答案 没有。 使用官方 SDK 开发的应用程序无法更改(并且在大
我要播放以下背景音乐: NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/bgMusic.mp3", [[NSBu
我希望仅为我的 WPF 应用程序静音,并让整个混音器保持用户设置的状态。 我可以使用以下代码使系统范围内的声音静音/取消静音。 但是我注意到当我的应用程序正在运行并且正在播放声音时,我的应用程序会出现
所以我有一个 iframe,其“src”指向一些音乐的 URL。 iframe 被隐藏并自动播放音乐。如何添加一个按钮来使音乐静音? 请注意,音乐来自外部网站。而且 URL 并不指向特定文件。它只是
我正在制作一个小型 Java 应用程序,该应用程序需要以隐藏模式打开 Firefox 浏览器并将其静音。 正如您通过下面的代码看到的,我找到了一种隐藏浏览器的方法。然而,我在弄清楚如何使浏览器静音以及
我正在为我的应用程序使用 SpeechRecognizer API,每次启动时,它都会播放“哔”声。 我想知道如何将它静音,这样我就可以自己实现一个。 谢谢。 最佳答案 如果您使用按钮来激活和停用识别
我正在创建我的第一个应用程序。我有一个使用以下代码在后台播放音乐的应用程序: var backgroundMusicPlayer = AVAudioPlayer() override func vie
我是一名优秀的程序员,十分优秀!