【问题标题】:How to get an accurate method of time passed using audioSettings.dspTime?如何使用 audioSettings.dspTime 获得准确的时间传递方法?
【发布时间】:2015-10-05 17:09:23
【问题描述】:

感谢您的寻找以及您可能获得的任何帮助/建议。

我正在尝试将音频与游戏同步。

这是一种使用 audioSettings.dspTime 找出过去了多少时间的准确方法吗?

我用一个代表时间的浮点数乘以 song.clip.frequency。

    float myChosenAmountOfTimeInSamples = myChosenAmountOfTime * song.clip.frequency; 
    float audioSecondsLater = Audio + myChosenAmountOfTimeInSamples;

还有这个到 audioSettings.dspTime * song.clip.frequency

    float Audio = (float)AudioSettings.dspTime * song.clip.frequency;
    float audioSecondsLater = Audio + myChosenAmountOfTimeInSamples;

我正在使用此代码来查看它是否有效。据我所知,它会在 1 秒后发生

更新中

if (Input.GetKeyDown (KeyCode.A)){
            StartCoroutine(test ());
        }

还有协程

IEnumerator test ()
{
    float Audio = (float)AudioSettings.dspTime * song.clip.frequency;
    float myChosenAmountOfTime = 1f;
    float myChosenAmountOfTimeInSamples = myChosenAmountOfTime * song.clip.frequency; 
    float audioSecondsLater = Audio + myChosenAmountOfTimeInSamples;

print ("Audio seconds later: " + audioSecondsLater);

while (true)
    {

        Audio = (float)AudioSettings.dspTime * song.clip.frequency;
        if (Audio >= audioSecondsLater)
        {
            print ("Audio Now: " + Audio); // Theoretically this is 1 second later
            break;
        }
    yield return new WaitForSeconds(1 / 1000f);
    }
}

【问题讨论】:

    标签: c# audio unity3d


    【解决方案1】:

    我不完全确定,但我认为你走在正确的轨道上。我之前已经针对单个 AudioClip 进行过同步,但我将所有时间都保存在样本中。为了检查当前样本,我检查了正在播放的剪辑上的AudioSource.timeSamples。我使用REAPER 来检查音频文件并找出事件发生在文件中的哪个样本,并将其与 timeSamples 进行比较以查看我的同步事件是否已经发生。

    AudioSource 还有一个time 属性,它是以秒为单位的播放位置,但请参阅文档中关于与压缩音频一起使用时不准确的说明。

    【讨论】:

    • 感谢艾略特的输入。我想我的问题可能很模棱两可。
    • @Jim 随时编辑问题以更清楚地解释您要做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2011-11-04
    • 2019-12-04
    • 1970-01-01
    • 2010-11-02
    相关资源
    最近更新 更多