1
2

More than 3 years have passed since last update.

JUCE: バックグラウンドでの再生On/Offのコントロール

Posted at

課題

JUCE/ProjucerのAudio Pluginテンプレートで作成したiOSアプリは、CapabilitiesでAudioのバックグランド再生をOnにするとその通りバックグラウンドでも再生できるが、常に再生になっている。これはユーザーにOn/Offを委ねたいところだが、テンプレートにはその機能は備わっていない。

前提

JUCE/ProjucerでAudioプラグイン/アプリを作っている。

解決方法

https://forum.juce.com/t/ios-background-processing/38308 に答えがあるのですが、JUCEApplicationBase::suspended()がバックグラウンドに回った時に呼ばれ、JUCEApplicationBase::resumed()がフォラグラウンドになった時に呼ばれるので、これらをオーバーライドすればできます。

Projucerの設定でPreprocessor DefinitionsにJUCE_USE_CUSTOM_PLUGIN_STANDALONE_APP=1を書いておいて、juce_StandaloneFilterApp.cppをまんまコピーしたMyStandaloneFilterApp.cppをプロジェクトに追加しておきます。

その上で、単にAudioのOn/Offをするのであれば、下記のコードでOK。

MyStandAloneFilterApp.cpp
    void suspended() override
    {
        StandalonePluginHolder* holder = StandalonePluginHolder::getInstance();
        jassert(holder != nullptr);
        holder->stopPlaying();
    }

    void resumed() override
    {
        StandalonePluginHolder* holder = StandalonePluginHolder::getInstance();
        jassert(holder != nullptr);
        holder->startPlaying();
    }

実際には、プラグインにフラグを持たせておいてそのフラグによってこの処理を行うか否かを決定することになると思うので、下記のような感じになるかと。

MyStandAloneFilterApp.cpp
    void suspended() override
    {
        StandalonePluginHolder* holder = StandalonePluginHolder::getInstance();
        jassert(holder != nullptr);
        MyAudioProcessor* processor = (MyAudioProcessor*)holder->processor.get();
        jassert(processor != nullptr);
        if (!processor->isBackgroundProcessingEnabled())
        {
            holder->stopPlaying();
        }
    }
    void resumed() override
    {
        StandalonePluginHolder* holder = StandalonePluginHolder::getInstance();
        jassert(holder != nullptr);
        MyAudioProcessor* processor = (MyAudioProcessor*)holder->processor.get();
        jassert(processor != nullptr);
        if (!processor->isBackgroundProcessingEnabled())
        {
            holder->startPlaying();
        }
    }
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2