有没有办法以几微秒的分辨率在C#中触发事件?我正在构建一个MIDI音序器,它需要在每个MIDI滴答声中触发一个事件,然后播放当时注册的任何音符。在每分钟120拍和120ppqn(每拍/四分音符脉冲数)分辨率下,该事件应每4.16666毫秒触发一次。现代音序器具有更高的分辨率,例如768ppqn,这要求该事件每651微秒触发一次。我发现的短时间事件的最佳分辨率是1毫秒。我怎样才能超越它?这个问题一定已经被任何C#MIDI音序器或MIDI文件播放器解决了。也许我只是没有从正确的角度看待问题。感谢您的帮助。 最佳答案 大多数MIDI音序器
这个简单的代码在我用来测试它的几台机器上没有产生任何声音。我从Eclipse中运行代码,但我也尝试使用命令行无济于事。publicstaticvoidmain(String[]args){try{Synthesizersynthesizer=MidiSystem.getSynthesizer();synthesizer.open();MidiChannel[]channels=synthesizer.getChannels();channels[0].noteOn(60,60);Thread.sleep(200);channels[0].noteOff(60);synthesizer.
关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭3年前。Improvethisquestion我想做什么:我想为Android编写一个非常简单的音乐音序器。但我从未分别在Android或Java上处理过音频。应用程序应该做什么:回放样本(WAVE/OGG文件)同时播放多个音频channel(例如,小号和长笛应同时播放,最多10种乐器)更改样本的音高(例如小号WAVE文件必须以正常音高(c4)和低音/高音(e2/g6)等播放)这是应用程序通常应该能够执行的操作。我需要什么组件?普通的媒体播放器(Au
我正在尝试在播放wav音频时播放midi文件。我试过letakSequencer=AKSequencer(filename:"melody")akSequencer.enableLooping()akSequencer.play()但它只播放第一个音符,没有其他内容。此外,我无法使用混音器将其与正在加载的wav文件混合,例如:letakMidiSampler=AKMIDISampler()letakSampler=AKSampler()letwavFile=tryAKAudioFile(forReading:wavUrl!)tryakSampler.loadAudioFile(wavF
问题1我的第一个问题涉及使用AVAudioPlayerNode和AVAudioSequencer进行MIDI时的播放同步。基本上我正在尝试通过MIDI播放一些东西,但它们需要完美同步。我知道AVAudioPlayerNode有同步方法,但音序器似乎没有类似的方法。目前我已经尝试在单独的线程上使用CAMediaTime()+delay和usleep,但它们似乎工作得不是很好。问题2我正在使用engine.inputNode上的点击来获取录音,与音乐播放分开。不过,好像录音开始得更早了。当我将录制的数据与原始播放进行比较时,差异约为300毫秒。我可以在300毫秒后开始录制,但即便如此,这也
我想知道如何使用AKSequencer控制AKOscillator的频率,但是几个例子(1,2)我'我们在网上看到的只是展示了如何使用AKSequencer控制AKSampler。这是来自AudioKit'sGitHubpage的简化示例://relevantclasspropertiesvarseq:AKSequencer?varsyn1=AKSampler()//viewDidLoadseq=AKSequencer(filename:"seqDemo",engine:AudioKit.engine)seq?.enableLooping()seq!.avTracks[1].desti
我有一个应用程序,其中有一个可以被多个客户端访问的共享资源(一个Motion系统)。我有个别操作需要在移动期间访问系统,如果同时请求冲突操作,它们应该抛出“忙碌”异常。我还有Sequencer,它需要获得对Motion系统的独占访问权限,以执行多个操作,穿插在其他操作中;在整个序列中,没有其他客户端能够运行操作。传统上,我使用线程亲和性来解决这个问题,这样线程就可以请求独占访问并运行与操作对应的阻塞调用。当线程可以访问时,其他线程不能使用该资源。我现在遇到的问题是我已经转向使用异步/等待模式来实现我的系统,以允许更清晰的音序器实现。问题是现在我的音序器并不总是在同一个线程上运行;事件线
我有一个应用程序,其中有一个可以被多个客户端访问的共享资源(一个Motion系统)。我有个别操作需要在移动期间访问系统,如果同时请求冲突操作,它们应该抛出“忙碌”异常。我还有Sequencer,它需要获得对Motion系统的独占访问权限,以执行多个操作,穿插在其他操作中;在整个序列中,没有其他客户端能够运行操作。传统上,我使用线程亲和性来解决这个问题,这样线程就可以请求独占访问并运行与操作对应的阻塞调用。当线程可以访问时,其他线程不能使用该资源。我现在遇到的问题是我已经转向使用异步/等待模式来实现我的系统,以允许更清晰的音序器实现。问题是现在我的音序器并不总是在同一个线程上运行;事件线
从4.1升级到4.2打破了我们的音序器和AKMIDISampler之间的连接。似乎该端口现在是私有(private)的(这是有道理的),但我如何连接到它? 最佳答案 好吧,我有一个通过扩展的快速修复,但如果有任何AK人有更好的建议,我会洗耳恭听!(我还对传递给“handle(event:)”的“事件”添加了健全性检查,因为我们有internalData.countimportFoundationimportAudioKitextensionAKMIDISampler{privatefunchandle(event:AKMIDIEve
我想使用AudioKit框架生成一些高音和低音的小声音序列。所以我开始的消息可能看起来像这样:“1100011010”-->每一列都应该循环,如果它的值为"1"AudioKit应该播放(短的)highfrequency声音,如果不是,它应该播放一个(短)低频声音。因为每0.15秒触发一次的简单定时器循环.play()-用于运行0.1s声音(高/低)似乎不太准确我决定使用*AudioKitSequencer*:(o)音频包:enumSequence:Int{casesnareDrum}varsnareDrum=AKSynthSnare()varsequencer=AKSequencer(