当前位置: 首页 > 知识库问答 >
问题:

AudioKit-使用定序器在特定位置播放声音文件

华安民
2023-03-14
enum Sequence: Int {
    case snareDrum
}
var snareDrum = AKSynthSnare()
var sequencer = AKSequencer()
var pumper: AKCompressor?
var mixer = AKMixer()

public init() {
    snareDrum >>> mixer
    pumper = AKCompressor(mixer)

    AudioKit.output = pumper
    AudioKit.start()
}

func setupTracks() {
    _ = sequencer.newTrack()
    sequencer.tracks[Sequence.snareDrum.rawValue].setMIDIOutput(snareDrum.midiIn)
    generateMessageSequence()

    sequencer.enableLooping()
    sequencer.setTempo(2000)
    sequencer.play()
}    
for i in message {
  counter+=0.15
  if (i=="1") {
   // play high sound at specific position 
  }
  else {
   // play low sound at specific position
  } 
}

(o)在特定位置播放低音:

 sequencer.tracks[Sequence.snareDrum.rawValue].add(noteNumber: 20,
                                                   velocity: 10,
                                                   position: AKDuration(beats: counter),
                                                   duration: AKDuration(beats: 1))

我的问题是:如何能够使用(Position:AKDuration(Beats:counter))//上面的代码而不是使用默认的工具(如本例中的AKSynthSnare())在特定位置播放本地声音文件?

共有1个答案

西门淮晨
2023-03-14

您可以创建两个曲目,每个曲目使用AKMIDispampler。一个播放“低”样本,另一个播放“高”样本。把高音分配给高音轨,低音分配给低音轨。

let sequencer = AKSequencer()
let lowTrack = sequencer.newTrack()
let lowSampler = AKMIDISampler()
try! lowSampler.loadWav("myLowSoundFile")
lowTrack?.setMIDIOutput(lowSampler.midiIn)

let highTrack = sequencer.newTrack()
let highSampler = AKMIDISampler()
try! highSampler.loadWav("myHighSoundFile")
highTrack?.setMIDIOutput(highSampler.midiIn)

sequencer.setLength(AKDuration(beats: 4.0))
sequencer.enableLooping()

然后将高、低音分配给每首曲目

let message = "1100011010"
let dur = 4.0 / Double(message.count)
var position: Double = 0
for i in message {
  position += dur

  if (i == "1") {
   highTrack?.add(noteNumber: 60, velocity: 100, position: AKDuration(beats: position), duration: AKDuration(beats: dur * (2/3)))
  } else {
   lowTrack?.add(noteNumber: 60, velocity: 100, position: AKDuration(beats: position), duration: AKDuration(beats: dur * (2/34)))
  } 
}

(我还没有运行代码,但类似这样的东西应该可以工作)

 类似资料:
  • 我正在尝试用AudioKit库播放音频mp3列表。我读过关于序列器的文章,我看到了官方AudioKit文档示例中的所有代码。调用sequencer.play()方法后,没有任何声音。

  • 问题内容: 在Python中播放声音文件(.wav)的最简单方法是什么?最简单的说,我指的是最独立的平台,并且需要最少的依赖。pygame当然是一个选择,但听起来似乎有些过分。 问题答案: Snack Sound Toolkit可以播放wav,au和mp3文件。

  • 问题内容: 我正在尝试播放声音,但无法正常工作。 编辑1: 仍然行不通。 编辑2 :此代码有效。我的设备处于静音模式。 问题答案: 对您的代码进行了修改: Swift 3和Swift 4.1:

  • 我正在开发一个应用程序,根据特定的间隔播放一些声音。我让用户控制这些声音的音量。告诉现在它是好的,声音音量级别是作为用户选择之前。但这里的问题是,设备的音量水平也发生了变化。问题是:如何在不影响设备声级的情况下以我的音量水平播放我的声音? 更新:根据Biraj解决方案,要获得每个设备的最大允许卷,使用int streamMaxVolume而不是MAX_VOLUME变量。所以完整的答案是:

  • 我对javascript和discord.js很陌生,有人知道如何让机器人加入一个频道,播放一个文件然后离开吗? 以下是我尝试过的: 现在,它将发送消息加入语音通道,而不管我是否在其中,如果我在其中,它就不会加入语音通道并播放文件。任何帮助都很感激。

  • 播放(播放音效/播放录音)