SoundService
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
ゲームで Sounds がプレイする方法を決定するサービス。SoundService は、SoundGroups を保存するためにもっていますが、これは SoundGroups が機能する必要はありません。
SoundService は何をすることができますか?
Class.SoundService.AmbientReverb 、SoundService.DistanceFactor、SoundService.DopplerScale 、および 1> Class.SoundService.RolloffScale1> などのサウンドサービスプロパティを変更することで、ゲーム内のすべての 4>
Class.SoundService:SetListener() 機能は、開発者がサウンドが聞こえる場所を設定することができます。
SoundService:PlayLocalSound() は、親になっている場所を問わず、音をローカルで再生することができます。
Roblox のサウンドの作動方法について詳しく知ることを希望する開発者は、FMOD サウンドエンジンのドキュメントを参照してください。
コードサンプル
local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local SoundService = game:GetService("SoundService")
local localPlayer = Players.LocalPlayer
local reverbTags = {
["reverb_Cave"] = Enum.ReverbType.Cave,
}
-- collect parts and group them by tag
local parts = {}
for reverbTag, reverbType in pairs(reverbTags) do
for _, part in pairs(CollectionService:GetTagged(reverbTag)) do
parts[part] = reverbType
end
end
-- function to check if a position is within a part's extents
local function positionInPart(part, position)
local extents = part.Size / 2
local offset = part.CFrame:PointToObjectSpace(position)
return offset.x < extents.x and offset.y < extents.y and offset.z < extents.z
end
local reverbType = SoundService.AmbientReverb
while true do
task.wait()
if not localPlayer then
return
end
local character = localPlayer.Character
-- default to no reverb
local newReverbType = Enum.ReverbType.NoReverb
if character and character.PrimaryPart then
local position = character.PrimaryPart.Position
-- go through all the indexed parts
for part, type in pairs(parts) do
-- see if the character is within them
if positionInPart(part, position) then
-- if so, pick that reverb type
newReverbType = type
break
end
end
end
-- set the reverb type if it has changed
if newReverbType ~= reverbType then
SoundService.AmbientReverb = newReverbType
reverbType = newReverbType
end
end
local ServerScriptService = game:GetService("ServerScriptService")
local SoundService = game:GetService("SoundService")
-- Create custom plugin button
local toolbar = plugin:CreateToolbar("Empty Script Adder")
local newScriptButton = toolbar:CreateButton("Add Script", "Create an empty Script", "rbxassetid://1507949215")
local function playLocalSound(soundId)
local sound = Instance.new("Sound")
sound.SoundId = soundId
SoundService:PlayLocalSound(sound)
sound.Ended:Wait()
sound:Destroy()
end
local function onNewScriptButtonClicked()
-- Create new empty script
local newScript = Instance.new("Script")
newScript.Source = ""
newScript.Parent = ServerScriptService
playLocalSound("rbxassetid://0") -- Insert audio asset ID here
end
newScriptButton.Click:Connect(onNewScriptButtonClicked)
概要
プロパティ
Class.SoundService が使用する環境音のプリセット。
3D Sound ボリュームの減衰を計算するときに SoundService によって検討されるスタッドの数。
このプロパティは、Doppler 効果により、3D Class.Sound オブジェクトのピッチがどの程度変化するかを決定します。
クライアントから Sound を再生するかどうかを設定します。
3D Sound ボリュームの減速速度を設定します。または「ロールオフ」を設定します。
方法
GetListener は、現在の Class.SoundService リスナータイプと、リスナーとして設定されているものを返します。
ローカルプレイ, サウンドはこの関数を呼び出すクライアントにのみ聞こえることになります。これは、サウンドが親になる場所にかかわらず、クライアントがこの関数を呼び出すことになります。
Class.SoundService のリスナーを設定します。
プロパティ
AmbientReverb
Class.SoundService が使用する環境音のプリセット。
このプロパティは、Enum.ReverbType このプロパティは、異なる環境の影響音をシミュレートします。各異なるオプションは、FMOD サウンドエンジンで利用可能なプリセットに対応します。たとえば、AmbientReverb を Hangar に設定すると、サウンドが大きな密室空間にあるように
環境音の効果を変更すると、Roblox サウンドエンジンが使用する次のプロパティが変更されます。
- 反復回数
- 最初の反射遅延時間
- 最初の反射時からの遅延時間に対する後の反復遅延時間
- 高周波参照
- 高周波崩壊時間比率
- 遅れた崩壊のディフェイスでエコーの密度を制御する値
- 遅れた再生時のモーダル密度を制御する値
- 低い周波数の参照
- 低周波の相対的な部屋のエフェクトレベル
- 高周波で相対的な部屋のエフェクトレベル
- ルームエフェクトに対する早期反射レベル
- ミッド周波数のルームエフェクトレベル
環境音のリバーブプリセットをさらに見つけることを検討している場合は、トピックの FMOD ドキュメント を参照してください。しかし、ほとんどの開発者にとって、Enum.ReverbType 名は、高度な知識なしにこの設定を使用できるように十分に説明的です。
コードサンプル
local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local SoundService = game:GetService("SoundService")
local localPlayer = Players.LocalPlayer
local reverbTags = {
["reverb_Cave"] = Enum.ReverbType.Cave,
}
-- collect parts and group them by tag
local parts = {}
for reverbTag, reverbType in pairs(reverbTags) do
for _, part in pairs(CollectionService:GetTagged(reverbTag)) do
parts[part] = reverbType
end
end
-- function to check if a position is within a part's extents
local function positionInPart(part, position)
local extents = part.Size / 2
local offset = part.CFrame:PointToObjectSpace(position)
return offset.x < extents.x and offset.y < extents.y and offset.z < extents.z
end
local reverbType = SoundService.AmbientReverb
while true do
task.wait()
if not localPlayer then
return
end
local character = localPlayer.Character
-- default to no reverb
local newReverbType = Enum.ReverbType.NoReverb
if character and character.PrimaryPart then
local position = character.PrimaryPart.Position
-- go through all the indexed parts
for part, type in pairs(parts) do
-- see if the character is within them
if positionInPart(part, position) then
-- if so, pick that reverb type
newReverbType = type
break
end
end
end
-- set the reverb type if it has changed
if newReverbType ~= reverbType then
SoundService.AmbientReverb = newReverbType
reverbType = newReverbType
end
end
DefaultListenerLocation
DistanceFactor
3D Sound ボリュームの減衰を計算するときに SoundService によって検討されるスタッドの数。
デフォルトでは、DistanceFactor は 3.33 です。これは、音量の減少の目的で、メートルが 3.33 スタッドであることを意味します。DistanceFactor が大きいほど、サウンドの減少量が増加します。
local SoundService = game:GetService("SoundService")SoundService.DistanceFactor = 1 -- 1 meter = 1 studSoundService.DistanceFactor = 10 -- 1 meter = 10 studs
開発者は、ゲームが異なるスケールを使用している場合、このプロパティのみを変更することをお勧めします。たとえば、大きなカスタムキャラクターを使用する場合は、Sound 設定を使用することで、Sound.RollOffMode の距離ファクターを減少できます。その他の場合は、 Class.
Roblox の 3D サウンドの仕組みについて詳しく知るには、FMOD ドキュメント を参照してください。
DopplerScale
このプロパティは、Doppler 効果により、3D Class.Sound オブジェクトのピッチがどの程度変化するかを決定します。
ドプラー効果は、サウンドのピッチがソースと観測者の距離が上昇するか、または近づくにつれて変化する現象を説明します。ドプラー効果は、車のサイレンを鳴らすと、通過するのが通常よりも早くなるか、または近づくのが通常よりも早くなることがよく見られます。
この値を上昇させると、ドーパー効果の影響を増大させますが、それを減少すると、最小限に抑えます。デフォルトでは、このプロパティの値は 1 です。
local SoundService = game:GetService("SoundService")SoundService.DopplerScale = 1 -- defaultSoundService.DopplerScale = 2 -- exaggerated Doppler effectSoundService.DopplerEffect = 0.5 -- subdued Doppler effect
注:ドップラー効果は 2D Sounds に影響しません。( Sounds は BasePart または 1> Class.Attachment1> に親化されていません)。
Roblox のサウンドエンジンが使用するさまざまな設定について学びたい開発者は、FMOD ドキュメントを参照してください。
RespectFilteringEnabled
Class.Sound:Play プレイバックをサーバーからクライアントにレプリケートするかどうかを決定するプロパティです。つまり、Sound が LocalScript を呼び出すと、サウンドはその客户端にのみプ
RolloffScale
3D Sound ボリュームの減速速度を設定します。または「ロールオフ」を設定します。
注意、このプロパティは Sounds のプロパティの Sound.RollOffMode が「逆」または「逆Tapered」に設定されてい
RolloffScale が高いほど、3D サウンドの音量は、距離が聴者からサウンドに増加するにつれて、より速く減少します。
デフォルトで、ロールオフスケールは 1 に設定され、これは現実世界をシミュレートします。
local SoundService = game:GetService("SoundService")SoundService.RolloffScale = 1 -- attenuation simulates real worldSoundService.RolloffScale = 2 -- sound attenuates twice as fast as the real world
Roblox のサウンドエンジンが使用するさまざまな設定について学びたい開発者は、FMOD ドキュメントを参照してください。
VolumetricAudio
方法
GetListener
この関数は、SoundService 現在のリスナータイプと、リスナーとして設定されているものを返します。
最初に返される結果は、Enum.ListenerType のライターの、2番目の結果は、ListenerType:
<tbody><tr><td><code>enum. listenersType.Camera</code></td><td>Workspace/CurrentCamera は常に使用されるため、リスナーオブジェクトを返しません</td></tr><tr><td><code>enum. listenersType.CFrame</code></td><td>Class.SoundService:SetListener() で使用される <code>Datatype.CFrame</code> を返します</td></tr><tr><td><code>enum. listenersType.objectPosition</code></td><td>Class.SoundService:SetListener() で使用される <code>Class.BasePart</code> を返します</td></tr><tr><td><code>enum. listenersType.ObjectCFrame</code></td><td>Class.SoundService:SetListener() で使用される <code>Class.BasePart</code> を返します</td></tr></tbody>
リスナータイプ | 説明 |
---|
Class.SoundService:SetListener() を使用してリスナーを変更できます。
local SoundService = game:GetService("SoundService")SoundService:SetListener(Enum.ListenerType.CFrame, CFrame.new(0, 0, 0))local listenerType, listener = SoundService:GetListener()print(listenerType, listener)
リスナーとは何ですか?
リスナーは、ゲーム内のオーディオがプレイヤーによってどのポイントから「聞こえる」かを決定します。3D Sounds (親に BasePart または Attachment がある) のリスナーは、プレイヤーのサウンドのボリュームと左/右のバランスに影�
デフォルトでは、リスナーは現在のカメラに設定されますが、さまざまな種類のリスナーを使用できます。
戻り値
現在の Enum.ListenerType と、リスナーが設定されたリスナーの Enum.ListenerType によります。BasePart がリスナーになると、1>Datatype.CFrame1> またはなしです。
OpenAttenuationCurveEditor
パラメータ
戻り値
OpenDirectionalCurveEditor
パラメータ
戻り値
PlayLocalSound
サウンドをローカルにプレイするために Sound をプレイします。これは、サウンドがクライアントがこの関数を呼び出すだけで聞こえることを意味します、どこに親切されていようと。この関数は、スタジオクライアントの Sound でローカルにプレ
パラメータ
戻り値
コードサンプル
local ServerScriptService = game:GetService("ServerScriptService")
local SoundService = game:GetService("SoundService")
-- Create custom plugin button
local toolbar = plugin:CreateToolbar("Empty Script Adder")
local newScriptButton = toolbar:CreateButton("Add Script", "Create an empty Script", "rbxassetid://1507949215")
local function playLocalSound(soundId)
local sound = Instance.new("Sound")
sound.SoundId = soundId
SoundService:PlayLocalSound(sound)
sound.Ended:Wait()
sound:Destroy()
end
local function onNewScriptButtonClicked()
-- Create new empty script
local newScript = Instance.new("Script")
newScript.Source = ""
newScript.Parent = ServerScriptService
playLocalSound("rbxassetid://0") -- Insert audio asset ID here
end
newScriptButton.Click:Connect(onNewScriptButtonClicked)
SetListener
クライアントが使用するリスナーを設定します。
最初のパラメーターは、Enum.ListenerType のリスナー、2番目のパラメーターは、リスナーのタイプによります。
- カメラリスナータイプ - は常に Workspace.CurrentCamera が使用されているため、リスナーオブジェクトを返しません
- CFrame ListenerType - The CFrame を使用する
- ObjectPosition ListenerType - 使用する BasePart
- ObjectCFrame ListenerType - 使用するベースパーツ
リスナーは、SoundService:GetListener() を使用して取得できます:
local SoundService = game:GetService("SoundService")SoundService:SetListener(Enum.ListenerType.CFrame, CFrame.new(0, 0, 0))local listenerType, listener = SoundService:GetListener()print(listenerType, listener)
リスナーとは何ですか?
Class.SoundService のリスナーは、プレイヤーがゲーム内のオーディオを「聞く」場所を決定します。3D Sounds (ベースパーツまたは Attachment に接続された) の場合、リスナーは音量と左/右のバランスを調整します。リス
デフォルトでは、リスナーは現在のカメラに設定されますが、さまざまな種類のリスナーを使用できます。
パラメータ
ライターの Enum.ListenerType 。