我正在创建一个音频项目作为一个学术练习-我想使用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_buffer
和CoreAudio.default_output_device.output_stream
,通过复制这些例子,我可以通过CoreAudio.default_output_device.output_buffer
获得一些声音。default_input_device
和default_output_device
是CoreAudio::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/