VolumeSizer की मदद से, ऐम्प्लीट्यूड को कंट्रोल करना

परफ़ॉर्मेंस बेहतर करने के लिए, ऑडियो ऐप्लिकेशन में VolumeShaper का इस्तेमाल किया जा सकता है फ़ेड-इन, फ़ेड-आउट, क्रॉस फ़ेड्स, डकिंग, और अन्य शॉर्ट ऑटोमेटेड वॉल्यूम ट्रांज़िशन हैं. VolumeShaper क्लास, Android 8.0 (एपीआई लेवल 26) में उपलब्ध है और बाद में.

आप createVolumeShaper() को कॉल करके VolumeShaper बनाते हैं AudioTrack या MediaPlayer. कॉन्टेंट बनाने VolumeShaper सिर्फ़ AudioTrack या MediaPlayer के ऑडियो पर काम करता है जिसने इसे बनाया.

VolumeSizer.कॉन्फ़िगरेशन

VolumeShaper का व्यवहार इसके आधार पर तय होता है VolumeShaper.Configuration. कॉन्फ़िगरेशन तय करता है कि *वॉल्यूम कर्व, इंटरपोलेटर का टाइप, और अवधि.*

वॉल्यूम कर्व

वॉल्यूम कर्व, समय के साथ आयाम में बदलाव दिखाता है. इसे पेयर से तय किया जाता है x[], और y[] फ़्लोट अरे का इस्तेमाल करें, जो कंट्रोल पॉइंट की सीरीज़ तय करते हैं. हर (x, y) जोड़ा, समय और आवाज़ को क्रम से दिखाता है. कलेक्शन की लंबाई बराबर होनी चाहिए और इसमें कम से कम 2 और 16 से ज़्यादा वैल्यू होनी चाहिए. (वक्र की अधिकतम लंबाई है getMaximumCurvePoints() में परिभाषित किया गया है.)

समय के निर्देशांक, इंटरवल [0.0, 1.0] के ऊपर दिए जाते हैं. पहली बार पॉइंट 0.0 होना चाहिए, आखिरी पॉइंट 1.0 होना चाहिए, और समय एक जैसे होने चाहिए बढ़ोतरी हो रही है.

आयतन के निर्देशांकों को, इंटरवल में लीनियर स्केल में दिखाया जाता है [0.0, 1.0].

इंटरपोलेटर का टाइप

वॉल्यूम कर्व हमेशा तय किए गए कंट्रोल पॉइंट से गुज़रता है. मान के बीच नियंत्रण बिंदुओं के बीच स्प्लिट की मदद से कॉन्फ़िगरेशन का इंटरपोलेटर टाइप दिख रहा है. उपलब्ध वैल्यू के लिए चार कॉन्सटेंट हैं VolumeShaper इंटरपोलेटर के टाइप:

  • आवाज़ आकारर.कॉन्फ़िगरेशन.INTERPOLATOR_TYPE_STEP
  • वॉल्यूम शेपर.कॉन्फ़िगरेशन.INTERPOLATOR_TYPE_LINEAR
  • Volume शेपr.Configuration.INTERPOLATOR_TYPE_CUBIC
  • वॉल्यूम शेपर.कॉन्फ़िगरेशन.INTERPOLATOR_TYPE_CUBIC_MONOTONIC

कुल अवधि

अंतराल [0.0, 1.0] में दिए गए समय निर्देशांक को अवधि होती है जिसे आप मिलीसेकंड में तय करते हैं. इससे वीडियो की सटीक लंबाई तय की जाती है वॉल्यूम कर्व का समय, जब शेपर चल रहा हो और कर्व को ऑडियो आउटपुट.

VolumeSizer का इस्तेमाल करना

कॉन्फ़िगरेशन बनाना

VolumeShaper बनाने से पहले, आपको VolumeShaper.Configuration का एक इंस्टेंस बनाना होगा. ऐसा करने के लिए VolumeShaper.Configuration.Builder():

Kotlin

val config: VolumeShaper.Configuration = VolumeShaper.Configuration.Builder()
        .setDuration(3000)
        .setCurve(floatArrayOf(0f, 1f), floatArrayOf(0f, 1f))
        .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR)
        .build()

Java

VolumeShaper.Configuration config =
  new VolumeShaper.Configuration.Builder()
      .setDuration(3000)
      .setCurve(new float[] {0.f, 1.f}, new float[] {0.f, 1.f})
      .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR)
      .build();

With no arguments the VolumeShaper.Configuration.Builder constructor returns a builder that creates a configuration with default settings: INTERPOLATOR_TYPE_CUBIC, a one second duration, and no curve. You must add a curve to the builder before calling build().

The framework provides constants for configurations with pre-built curves, each with one second duration:

  • VolumeShaper.Configuration.LINEAR_RAMP
  • VolumeShaper.Configuration.CUBIC_RAMP
  • VolumeShaper.Configuration.SINE_RAMP
  • VolumeShaper.Configuration.SCURVE_RAMP

Creating a VolumeShaper

To create a VolumeShaper, call createVolumeShaper() on an instance of the appropriate class, passing in a VolumeShaper.Configuration:

Kotlin

volumeShaper = myMediaPlayer.createVolumeShaper(config)
volumeShaper = myAudioTrack.createVolumeShaper(config)

Java

volumeShaper = myMediaPlayer.createVolumeShaper(config);
volumeShaper = myAudioTrack.createVolumeShaper(config);

A single track or media player can have many shapers attached to it, and you can control each shaper separately. The outputs of all the shapers on a track or player are multiplied together. A VolumeShaper cannot be shared between AudioTracks or MediaPlayers, but you can use the same configuration in calls to createVolumeShaper to build identical shapers on multiple AudioTracks or MediaPlayers.

When you create the shaper, its first control point (at t = 0) is applied to the audio stream. If the initial volume is not 1.0 and your app is playing material at create time, your audio might have an abrupt change in volume. Best practice is to start playing audio from silence and use a VolumeShaper to implement a fade-in when playback starts. Create a VolumeShaper that starts at 0 volume and fades up. For example:

setCurve(new float[] {0.f, 1.f}, new float[] {0.f, 1.f})

चलाना और शेपर एक साथ शुरू करें. इससे पक्का होता है कि जब भी यह सुविधा तब शुरू होती है, जब उपयोगकर्ता आवाज़ बंद कर देता है और आवाज़ तेज़ हो जाती है. यह इसमें बताया गया है अगला सेक्शन देखें.

Volume shaper को चलाने का तरीका

हालांकि, ऑडियो पाथ पर पहले कंट्रोल पॉइंट का वॉल्यूम लेवल लागू होता है जैसे ही शेपर बन जाता है, तो शेपर कर्व के साथ आगे नहीं बढ़ता जब तक कि आप VolumeShaper.Operation.PLAY से apply() तरीके को कॉल नहीं करते. इस तारीख के बाद शेपर बनाते हुए, apply() के पहले इनवॉइस में PLAY तय करना ज़रूरी है कार्रवाई करनी होगी. यह कर्व को पहले से शुरू होता है अंतिम नियंत्रण बिंदु:

Kotlin

शेपर.apply(वॉल्यूम फ़ंक्शनर.ऑपरेशन.PLAY)

Java

shaper.apply(वॉल्यूम शेपर.Operation.PLAY);

शेपर के चलने के दौरान, आपके पास apply() कॉल को बदलने का विकल्प होता है रिवर्स और PLAY कार्रवाइयां. इससे रीडआउट की दिशा बदल जाती है नियंत्रण बिंदु मिलते हैं.

शेपर वॉल्यूम को लगातार अडजस्ट करता है और सभी कंट्रोल पॉइंट से गुजरता है उसकी समयसीमा खत्म होने तक. ऐसा तब होता है, जब शेपर आखिरी पॉइंट पर पहुंच जाता है (PLAY के लिए) ऑपरेशन) या पहले (रिवर्स ऑपरेशन के लिए) कंट्रोल पॉइंट का इस्तेमाल करें.

शेपर की समयसीमा खत्म होने के बाद, वॉल्यूम आखिरी सेटिंग पर बना रहता है. हालांकि, हो सकता है कि पहला या आखिरी कंट्रोल पॉइंट. आप VolumeShaper.getVolume() को इसके लिए कॉल कर सकते हैं: किसी भी समय आवाज़ के मौजूदा लेवल को सेट करें.

शेपर की समयसीमा खत्म होने के बाद, कर्व को चलाने के लिए दूसरा apply() कॉल किया जा सकता है पर क्लिक करें. उदाहरण के लिए, अगर दौड़ते समय शेपर की समयसीमा खत्म हो गई हो PLAY, अगला apply() REVERSE होना चाहिए. PLAY के बाद PLAY पर कॉल किया जा रहा है खत्म हो गया है या REVERSE के बाद REVERSE पर कोई असर नहीं पड़ेगा.

आपको PLAY और REVERSE वैकल्पिक कार्रवाइयां करनी होंगी. चलाने का कोई तरीका नहीं है, पहले वक्र से अंतिम नियंत्रण बिंदुओं तक और फिर इसे पहला कंट्रोल पॉइंट. replace() तरीके का इस्तेमाल किया जा सकता है. इसके बारे में अगले लेख में बताया गया है सेक्शन में, कर्व को उसकी खुद की कॉपी से बदलें. यह शेपर को रीसेट कर देता है, इसे फिर से शुरू करने के लिए, PLAY कार्रवाई ज़रूरी है.

कर्व बदलना

VolumeShaper का कर्व बदलने के लिए replace() तरीके का इस्तेमाल करें. इस तरीके से कोई कॉन्फ़िगरेशन, कोई कार्रवाई, और जॉइन पैरामीटर. आप शेपर के चलने या उसकी समयसीमा खत्म होने के बाद, किसी भी समय replace() तरीका:

Kotlin

val newConfig = VolumeSizer.Configuration.Builder()
        .setDuration(1,000)
        .setCurve(floatArrayOf(0f, 0.5f), floatArrayOf(0f, 1f))
        .setInterplatorType(VolumeSizer.Configuration.INTERPOLATOR_TYPE_LINEAR)
        .build()
वैल जॉइन = सही
शेपr.replace(newconfig, VolumeSpecificationr.Operation.PLAY, जॉइन)

Java

VolumeSpecificationr.Configuration newConfig =
  नया VolumeSpecificationr.Configuration.Builder()
    .setDuration(1,000)
    .setCurve(नया फ़्लोट[] {0.f, 0.5f}, नया फ़्लोट[] {0.f, 1.f})
    .setInterplatorType(VolumeSizer.Configuration.INTERPOLATOR_TYPE_LINEAR)
    .build();
बूलियन जॉइन = true;
shaper.replace(newConfig, Volumeबदल.Operation.PLAY, जॉइन);

शेपर के चलने के दौरान, replace() को कॉल करने पर, यह वॉल्यूम और अपनी मौजूदा वैल्यू पर ही रहता है. इसके बाद, शेपर नया शुरू करने की कोशिश करता है पहले कंट्रोल पॉइंट से कर्व की पहचान करने में मदद मिलती है. इसका मतलब है कि ऑपरेशन आर्ग्युमेंट यह नीति कंट्रोल करती है कि शेपर कॉल के बाद चलेगा या नहीं. PLAY को इसके लिए तय करें नया कर्व तुरंत शुरू करना है, तो शेपर को यहां रोकने के लिए REVERSE तय करें नए कर्व के पहले कंट्रोल पॉइंट का वॉल्यूम. शेपर शुरू किया जा सकता है बाद में apply(VolumeShaper.Operation.PLAY) के साथ.

replace() को join = false कॉल करने पर, शेपर अपना कर्व शुरू करता है: उसके पहले कंट्रोल पॉइंट से तय किया गया लेवल है. इस वजह से, एक ही जगह पर अलग-अलग सेशन चल सकते हैं का इस्तेमाल करें. इससे बचने के लिए, replace() को join = true पर कॉल करें. यह नए कर्व का पहला नियंत्रण बिंदु इसके मौजूदा स्तर पर सेट करता है शेपर और पहले और दूसरे के बीच के सभी कंट्रोल पॉइंट के वॉल्यूम को स्केल करता है नए वक्र की सापेक्ष आकृति बनाए रखने के लिए अंतिम बार (अंतिम नियंत्रण बिंदु है कोई बदलाव नहीं). स्केलिंग कार्रवाई शेपर का नया कर्व.

Volume shaper को हटाना

सिस्टम बंद हो जाता है और गार्बेज, VolumeShaper को इकट्ठा करता है. ऐसा तब होता है, जब AudioTrack या MediaPlayer रिलीज़ हो गया है या अब इस्तेमाल में नहीं है. close() तरीके को कॉल किया जा सकता है उसे तुरंत नष्ट करने के लिए. सिस्टम, शेपर को करीब 20 मि॰से॰ में ऑडियो पाइपलाइन डालना होगा. VolumeShaper को बंद करते समय सावधानी बरतें जब ऑडियो चल रहा हो. कॉल करने पर, अगर शेपर की आवाज़ 1.0 से कम है close(), शेपर का वॉल्यूम स्केल 1.0 में बदल जाता है. इसकी वजह से अचानक बढ़ोतरी देखी जा सकती है.