我正在创建一个音频项目作为一个学术练习-我想使用Ruby作为一个非rails项目我在这里遇到了coreadio gem:https://github.com/nagachika/ruby-coreaudio并认为它将有助于回放我正在创建的音频。不过,有些基本的事情我只是没有得到这个宝石。
1)是否有文件?我很乐意自愿为这个项目做贡献,写下文件,但恐怕我缺乏这样做的基本理解。我在这里查看了生成的文档:http://rubydoc.info/gems/coreaudio/但这只是更神秘的。我认为这至少会显示方法原型,但我只看到一个方法CoreAudio::AudioFile:read。这些示例调用了此处未显示的其他方法。
2)有哪些可用方法/是否有API?这些例子包括CoreAudio.default_input_device.input_bufferCoreAudio.default_output_device.output_stream,通过复制这些例子,我可以通过CoreAudio.default_output_device.output_buffer获得一些声音。default_input_devicedefault_output_deviceCoreAudio::AudioDevice的实例。这太棒了,但我不知道CoreAudio::AudioDevice是什么。
3)什么是CoreAudio::AudioDevice?由于没有更复杂的工具可供我使用,我在已安装的gem文件中重设了字符串“AudioDevice”我在文件/ext/coreadio.m中找到了许多实例。代码看起来像c,我认为.m是目标c项目中某一类型文件的文件后缀。在那个文件中,我看到字符串'AudioDevice'的唯一地方,它不是一个更大的变量名(例如:rb_cAudioDevice)的一部分,是在注释中,但我猜这个目标C代码被编译成我不知道…
4)这些目标C文件在这里做什么红宝石呢这个项目中不应该有一个或多个用ruby编写的文件来定义coreaudio::audiodevice类吗?任何可感知大小的唯一.rb文件是lib/coreadio/audiofile.rb(其中定义了read方法,rdoc中显示的唯一方法)。
5)什么是CoreAudio_Ext.Bundle?gem安装过程创建了一个名为coreadio_ext.bundle的二进制文件,如果我不得不猜测,这将是编译项目中目标c文件的结果。这个文件在lib/coreadio/coreadio.rb中是必需的,所以对ruby来说一定很重要,但对我来说它是一个黑匣子。我假设它是一个包含短暂coreadio::audiodevice定义的黑盒。除了看例子,我怎么知道如何使用这个?
请帮助我了解我缺少什么。

最佳答案

既然我问了,我就试着把我的答案记录下来,以备将来的考古学家可能会对同样的问题感到困惑。感谢尼尔·斯莱特,他为我指出了回答问题所需的重要资源。
1)是否有文件?-不是真的。CoreAudio::AudioFile:read函数是rdoc记录的唯一函数,因为其他所有东西都是用c语言的ruby扩展实现的,具体机制如下:http://media.pragprog.com/titles/ruby3/ext_ruby.pdf。事实证明,这个过程已经完成了大量的现有C库,以将其功能添加到Ruby中。
2)有哪些可用方法/是否有API?-创建的扩展相当于以下内容:(欢迎更正)

Module CoreAudio

  class AudioDevice
    attr_reader :devid, :name, :available_sample_rate, :nominal_rate, :input_stream, :output_stream

    def initialize(devIdVal, options)
      ...
    end

    def actual_rate
      ...
    end

    def output_loop(frame)
      ...
    end

    def output_buffer(frame)
      ...
    end

    def input_buffer(frame)
      ...
    end
  end

  class AudioStream
    attr_reader :channels, :buffer_frame_size

    def initialize(devid_val, is_input)
      ...
    end
  end

  class OutLoop
    def []=(index, val)
      ...
    end

    def start
      ...
    end

    def stop
      ...
    end
  end

  class AudioBuffer
    def start
      ...
    end

    def stop
      ...
    end

    def dropped_frame
      ...
    end

    def reset_dropped_frame
      ...
    end

    def space
      ...
    end

  end

  class OutputBuffer
    def <<(nary)
      ...
    end
  end

  class InputBuffer
    def read(num)
      ...
    end
  end

  def devices
    ...
  end

  def default_input_device
    ...
  end

  def default_output_device
    ...
  end

  def set_default_output_device
    ...
  end

  class AudioFile
    def initialize
      ...
    end

    def close
      ...
    end

    def write(data)
      ...
    end

    def read_frames(frame_val)
      ...
    end

    def rate
      ...
    end

    def channels
      ...
    end

    def inner_rate
      ...
    end

    def inner_channels
      ...
    end

  end
end

3)什么是CoreAudio::AudioDevice?-我搞错了字符串“audiodevice”本身没有作为标识符出现-它出现在C代码中,如下所示:
rb_cAudioDevice = rb_define_class_under(rb_mCoreAudio, "AudioDevice", rb_cObject);

这是在coreadio模块内部声明类audiodevice。
4)红宝石在哪里?-这个gem使用coreadio扩展ruby,用c语言编写。
5)什么是CoreAudio_Ext.Bundle?这是编译过的C代码。coreadio.rb中的gem需要它
require "coreaudio/coreaudio_ext"

.bundle文件相当于Windows中的.dll文件(我不相信这个gem有windows实现,因为coreadio是mac专用技术)

关于objective-c - 使用Ruby coreaudio gem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25048433/

10-13 00:11