Difference between revisions of "SoundData:setSample (日本語)"

(Created page with "指定された位置のサンプルを設定します。 == 関数 == === 概要 === <source lang="lua"> SoundData:setSample( i, sample ) </source> === 引数 === {{param|num...")
 
m (用例: Translation updated.)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
指定された位置のサンプルを設定します。
+
指定位置にあるサンプルポイントの値を設定します。ステレオ SoundData オブジェクトでは、左側と右側のチャンネルデータは順列形式でインタリーブされます。
 
== 関数 ==
 
== 関数 ==
 
=== 概要 ===
 
=== 概要 ===
Line 6: Line 6:
 
</source>
 
</source>
 
=== 引数 ===
 
=== 引数 ===
{{param|number|i|サンプルの位置 (0 は最初のサンプルという意味です)。}}
+
{{param|number|i|サンプルの位置を指定するための整数値 (0 は最初のサンプルへの位置)。}}
{{param|number|sample|正規化されたサンプル(範囲は -1.0 から 1.0)}}
+
{{param|number|sample|正規化されたサンプルポイント (範囲は -1.0 1.0)}}
 
=== 返値 ===
 
=== 返値 ===
なし。
+
ありません。
 +
 
 +
== 関数 ==
 +
{{newin (日本語)|[[11.0 (日本語)|11.0]]|110|type=異形}}
 +
サンプル位置指定用の引数でインタリーブをする方法ではなく、明示的なサンプルインデックスでサンプル値を設定します。
 +
=== 概要 ===
 +
<source lang="lua">
 +
SoundData:setSample( i, channel, sample )
 +
</source>
 +
=== 引数 ===
 +
{{param|number|i|サンプルの位置を指定するための整数値 (0 は最初のサンプルへの位置)。}}
 +
{{param|number|channel|指定サンプル内のチャンネル設定用インデックス (起点は 1)。ステレオでは、左チャンネルは  1 であり、右チャンネルは 2 です。}}}}
 +
{{param|number|sample|正規化されたサンプルポイント (範囲は -1.0 ~ 1.0)}}
 +
=== 返値 ===
 +
ありません。
 +
 
 +
== 用例: 正弦波による単音の発音 ==
 +
 
 +
<source lang="lua">
 +
local tau          =  math.pi * 2
 +
local samplerate  =        44100 -- 周波数
 +
local bits        =            16 -- 8 ビットは調停品質のサウンドになります。
 +
local channels    =            2 -- LÖVE はステレオまたはモノラルのみ対応です。
 +
local buffercount  =            2 -- 大容量のバッファは不要
 +
local qsource      = love.audio.newQueueableSource(samplerate, bits, channels, buffercount)
 +
local samplepoints = samplerate/10 -- 一度にバッファで保持する容量
 +
local buffer      = love.sound.newSoundData(samplepoints, samplerate, bits, channels)
 +
local phase        =          0.0
 +
local frequency    =        220.00 -- 周波数
 +
local amplitude    =          0.5 -- 50%
 +
 
 +
 
 +
local function synth()
 +
    phase = phase + (tau * frequency / samplerate)
 +
    return math.sin(phase) * amplitude
 +
end
 +
 
 +
function love.update(dt)
 +
    while qsource:getFreeBufferCount() > 0 do
 +
        for i = 0, samplepoints - 1 do
 +
            buffer:setSample(i, synth())
 +
        end
 +
        qsource:queue(buffer)
 +
        qsource:play()
 +
    end
 +
end
 +
 
 +
function love.keypressed(key)
 +
    if key == 'k' then
 +
        frequency = frequency * 2^(1/12)
 +
    elseif key == 'j' then
 +
        frequency = frequency * 2^(-1/12)
 +
    end
 +
end
 +
</source>
 +
 
 
== 関連 ==
 
== 関連 ==
 
* [[parent::SoundData (日本語)]]
 
* [[parent::SoundData (日本語)]]
 
[[Category:Functions]]
 
[[Category:Functions]]
{{#set:Description=指定された位置のサンプルを設定します。}}
+
{{#set:Description=指定位置にあるサンプルポイントの値を設定します。}}
 
{{#set:Since=000}}
 
{{#set:Since=000}}
 
== そのほかの言語 ==
 
== そのほかの言語 ==
{{i18n|SoundData:setSample}}
+
{{i18n (日本語)|SoundData:setSample}}

Latest revision as of 11:27, 23 July 2023

指定位置にあるサンプルポイントの値を設定します。ステレオ SoundData オブジェクトでは、左側と右側のチャンネルデータは順列形式でインタリーブされます。

関数

概要

SoundData:setSample( i, sample )

引数

number i
サンプルの位置を指定するための整数値 (0 は最初のサンプルへの位置)。
number sample
正規化されたサンプルポイント (範囲は -1.0 ~ 1.0)

返値

ありません。

関数

LÖVE 11.0 から使用可能
この異形は以前のバージョンでは非対応です。

サンプル位置指定用の引数でインタリーブをする方法ではなく、明示的なサンプルインデックスでサンプル値を設定します。

概要

SoundData:setSample( i, channel, sample )

引数

number i
サンプルの位置を指定するための整数値 (0 は最初のサンプルへの位置)。
number channel
指定サンプル内のチャンネル設定用インデックス (起点は 1)。ステレオでは、左チャンネルは 1 であり、右チャンネルは 2 です。}}
number sample
正規化されたサンプルポイント (範囲は -1.0 ~ 1.0)

返値

ありません。

用例: 正弦波による単音の発音

local tau          =   math.pi * 2
local samplerate   =         44100 -- 周波数
local bits         =            16 -- 8 ビットは調停品質のサウンドになります。
local channels     =             2 -- LÖVE はステレオまたはモノラルのみ対応です。
local buffercount  =             2 -- 大容量のバッファは不要
local qsource      = love.audio.newQueueableSource(samplerate, bits, channels, buffercount)
local samplepoints = samplerate/10 -- 一度にバッファで保持する容量
local buffer       = love.sound.newSoundData(samplepoints, samplerate, bits, channels)
local phase        =           0.0
local frequency    =        220.00 -- 周波数
local amplitude    =           0.5 -- 50%


local function synth()
    phase = phase + (tau * frequency / samplerate)
    return math.sin(phase) * amplitude
end

function love.update(dt)
    while qsource:getFreeBufferCount() > 0 do
        for i = 0, samplepoints - 1 do
            buffer:setSample(i, synth())
        end
        qsource:queue(buffer)
        qsource:play()
    end
end

function love.keypressed(key)
    if key == 'k' then
        frequency = frequency * 2^(1/12)
    elseif key == 'j' then
        frequency = frequency * 2^(-1/12)
    end
end

関連


そのほかの言語