add PCMStream:create_sound method
This commit is contained in:
parent
cf561e78a8
commit
be2dc1abe5
@ -122,6 +122,16 @@ function on_hud_open()
|
|||||||
stream = PCMStream(44100, 1, 16)
|
stream = PCMStream(44100, 1, 16)
|
||||||
stream:share("test-stream")
|
stream:share("test-stream")
|
||||||
streamid = audio.play_stream_2d("test-stream", 2.0, 1.0, "ui")
|
streamid = audio.play_stream_2d("test-stream", 2.0, 1.0, "ui")
|
||||||
|
|
||||||
|
|
||||||
|
s = PCMStream(44100, 1, 8)
|
||||||
|
local buffer = Bytearray(44100)
|
||||||
|
for i=1, #buffer do
|
||||||
|
buffer[i] = math.random(1, 8)
|
||||||
|
end
|
||||||
|
s:feed(buffer)
|
||||||
|
s:create_sound("test-sound")
|
||||||
|
audio.play_sound_2d("test-sound", 2.0, 1.0, "ui")
|
||||||
end
|
end
|
||||||
|
|
||||||
function on_hud_render()
|
function on_hud_render()
|
||||||
|
|||||||
@ -61,3 +61,7 @@ bool MemoryPCMStream::isSeekable() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MemoryPCMStream::seek(size_t position) {}
|
void MemoryPCMStream::seek(size_t position) {}
|
||||||
|
|
||||||
|
size_t MemoryPCMStream::available() const {
|
||||||
|
return buffer.size();
|
||||||
|
}
|
||||||
|
|||||||
@ -31,6 +31,8 @@ namespace audio {
|
|||||||
bool isSeekable() const override;
|
bool isSeekable() const override;
|
||||||
|
|
||||||
void seek(size_t position) override;
|
void seek(size_t position) override;
|
||||||
|
|
||||||
|
size_t available() const;
|
||||||
private:
|
private:
|
||||||
uint sampleRate;
|
uint sampleRate;
|
||||||
uint channels;
|
uint channels;
|
||||||
|
|||||||
@ -44,9 +44,35 @@ static int l_share(lua::State* L) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int l_create_sound(lua::State* L) {
|
||||||
|
auto stream = touserdata<LuaPCMStream>(L, 1);
|
||||||
|
if (stream == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
auto alias = require_lstring(L, 2);
|
||||||
|
auto memoryStream = stream->getStream();
|
||||||
|
|
||||||
|
std::vector<char> buffer(memoryStream->available());
|
||||||
|
memoryStream->readFully(buffer.data(), buffer.size(), true);
|
||||||
|
|
||||||
|
auto pcm = std::make_shared<PCM>(
|
||||||
|
std::move(buffer),
|
||||||
|
0,
|
||||||
|
memoryStream->getChannels(),
|
||||||
|
static_cast<uint8_t>(memoryStream->getBitsPerSample()),
|
||||||
|
memoryStream->getSampleRate(),
|
||||||
|
memoryStream->isSeekable()
|
||||||
|
);
|
||||||
|
auto sound = audio::create_sound(std::move(pcm), true);
|
||||||
|
auto assets = engine->getAssets();
|
||||||
|
assets->store<audio::Sound>(std::move(sound), std::string(alias));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static std::unordered_map<std::string, lua_CFunction> methods {
|
static std::unordered_map<std::string, lua_CFunction> methods {
|
||||||
{"feed", lua::wrap<l_feed>},
|
{"feed", lua::wrap<l_feed>},
|
||||||
{"share", lua::wrap<l_share>},
|
{"share", lua::wrap<l_share>},
|
||||||
|
{"create_sound", lua::wrap<l_create_sound>},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int l_meta_meta_call(lua::State* L) {
|
static int l_meta_meta_call(lua::State* L) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user