সম্পদ ডিরেক্টরি থেকে অডিও ফাইল খেলুন


126

আমার কাছে নিম্নলিখিত কোড রয়েছে:

AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor());
player.prepare();
player.start();

সমস্যাটি হ'ল, আমি যখন এই কোডটি চালাই, তখন এটি আমার অনুরোধ করা অডিও ফাইলটি পরিবর্তে বর্ণমালার ক্রমে সম্পদ ডিরেক্টরিতে সমস্ত অডিও ফাইল বাজানো শুরু করে। আমি কি ভুল করছি? সম্পদ ডিরেক্টরি থেকে অডিও ফাইলগুলি খেলার আরও কি ভাল উপায় আছে?

ফলো-আপ প্রশ্ন: সম্পদ ডিরেক্টরিতে অডিও ফাইলগুলি রাখা এবং তাদেরকে পুনরায় / কাঁচা ডিরেক্টরিতে রাখার মধ্যে কি পার্থক্য রয়েছে? সম্পদ ডিরেক্টরিতে থাকলে তারা আইডিগুলি পায় না এই বিষয়টি ছাড়াও। আমি যদি অডিও ফাইলগুলিকে রেজ / কাঁচা ফোল্ডারে স্থানান্তরিত করি তবে আমার পুনরায় ব্যবহারের ক্ষেত্রে সমস্যা MediaPlayerআছে কারণ কোনও আইডি প্যারামিটার নেই setDataSource()। এই ধরণের সমস্যা পরিচালনা করার জন্য আমি কোনও ভাল দিকনির্দেশ খুঁজে পাচ্ছি না।

উত্তর:


237
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

সম্পদ ডিরেক্টরিতে যদি আপনার কাছে কেবল একটি ফাইল থাকে তবে আপনার সংস্করণটি কাজ করবে। সম্পদ ডিরেক্টরি সামগ্রীগুলি ডিস্কে আসলে 'আসল ফাইলগুলি' নয়। তাদের সব একের পর এক রাখা হয় put সুতরাং, আপনি কোথায় শুরু করবেন এবং কয়টি বাইট পড়তে হবে তা যদি নির্দিষ্ট না করে থাকেন তবে প্লেয়ার শেষ অবধি পড়বে (এটি সম্পদ ডিরেক্টরিতে সমস্ত ফাইল খেলতে থাকবে)


1
এটা কাজ করেছে. ধন্যবাদ। তবে আমি মনে করি আমার সংস্করণটিও কাজ করবে।
ক্যাটালিন মরোসান

57
সম্পদ ডিরেক্টরিতে যদি আপনার কাছে একটি ফাইল থাকে তবে আপনার সংস্করণটি কাজ করবে। সম্পদ ডিরেক্টরি সামগ্রীগুলি ডিস্কে আসলে 'আসল ফাইলগুলি' নয়। তাদের সব একের পর এক রাখা হয় put সুতরাং, আপনি কোথায় শুরু করবেন এবং কয়টি বাইট পড়তে হবে তা যদি নির্দিষ্ট না করে থাকেন তবে প্লেয়ার শেষ অবধি পড়বে (এটি সম্পদ ডিরেক্টরিতে সমস্ত ফাইল খেলতে থাকবে)
সরওয়ার এরফান

1
এই কোড পাথটি আমি ব্যবহার করছি তবে এটি কাজ করে না: stackoverflow.com/questions/9124378/…
টিমোথি লি রাসেল

1
সম্পদ ফাইল সম্পর্কে আমার কাছে একটি সম্পূর্ণ অসম্পৃক্ত প্রশ্নের উত্তর দেওয়ার জন্য +1!
jjm

সম্পদ ডিরেক্টরি প্রয়োগের মাধ্যমে @ সরওয়ারআরফানের মন উদ্রেক হয়েছে> _ <
ওয়ারপজিট

74

এই ফাংশনটি সঠিকভাবে কাজ করবে :)

// MediaPlayer m; /*assume, somewhere in the global scope...*/

public void playBeep() {
    try {
        if (m.isPlaying()) {
            m.stop();
            m.release();
            m = new MediaPlayer();
        }

        AssetFileDescriptor descriptor = getAssets().openFd("beepbeep.mp3");
        m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
        descriptor.close();

        m.prepare();
        m.setVolume(1f, 1f);
        m.setLooping(true);
        m.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3
আমি কি? আপনি এম = নতুন মিডিয়াপ্লেয়ার () শুরু করছেন; পরে এবং আগে এটি ব্যবহার?
উমার

হাই @ উমার, আমি গ্লোবাল ভেরিয়েবল মিডিয়াপ্লেয়ার এম = নাল নিয়েছি; তারপরে আমি প্লেবাইপ () ফাংশনটিতে নির্ধারিত করেছি
সিদ্ধপুরা অমিত

মনে রাখবেন MediaPlayer mঅবশ্যই staticঅন্য একটি রেফারেন্স থাকতে হবে । আপনার যদি mকোনও রেফারেন্স ছাড়াই কোনও ফাংশনে থাকে তবে এটি GC"সংগ্রহ" করবে
মেনেলাওস কোটসোল্লারিস

কখনও কখনও অডিও শেষ পর্যন্ত প্লে হয় না
user7856586

লুপিং সত্য যে চিরকাল বাজানো হয়?
gumuruh

4

এখানে আমার স্থিতিশীল সংস্করণ:

public static void playAssetSound(Context context, String soundFileName) {
    try {
        MediaPlayer mediaPlayer = new MediaPlayer();

        AssetFileDescriptor descriptor = context.getAssets().openFd(soundFileName);
        mediaPlayer.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
        descriptor.close();

        mediaPlayer.prepare();
        mediaPlayer.setVolume(1f, 1f);
        mediaPlayer.setLooping(false);
        mediaPlayer.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

1

খেলা এবং বিরতির জন্য উপরের ফাংশনটির ফিক্স

  public void playBeep ( String word )
{
    try
    {
        if ( ( m == null ) )
        {

            m = new MediaPlayer ();
        }
        else if( m != null&&lastPlayed.equalsIgnoreCase (word)){
            m.stop();
            m.release ();
            m=null;
            lastPlayed="";
            return;
        }else if(m != null){
            m.release ();
            m = new MediaPlayer ();
        }
        lastPlayed=word;

        AssetFileDescriptor descriptor = context.getAssets ().openFd ( "rings/" + word + ".mp3" );
        long                start      = descriptor.getStartOffset ();
        long                end        = descriptor.getLength ();

        // get title
        // songTitle=songsList.get(songIndex).get("songTitle");
        // set the data source
        try
        {
            m.setDataSource ( descriptor.getFileDescriptor (), start, end );
        }
        catch ( Exception e )
        {
            Log.e ( "MUSIC SERVICE", "Error setting data source", e );
        }

        m.prepare ();
        m.setVolume ( 1f, 1f );
        // m.setLooping(true);
        m.start ();
    }
    catch ( Exception e )
    {
        e.printStackTrace ();
    }
}

1

এখানে চিত্র বর্ণনা লিখুন

শব্দ শুরু করুন

startSound("mp3/ba.mp3");

পদ্ধতি

private void startSound(String filename) {
    AssetFileDescriptor afd = null;
    try {
        afd = getResources().getAssets().openFd(filename);
    } catch (IOException e) {
        e.printStackTrace();
    }
    MediaPlayer player = new MediaPlayer();
    try {
        assert afd != null;
        player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        player.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    player.start();
}

-4

এটি আমার পক্ষে কাজ করে:

public static class eSound_Def
{
  private static Android.Media.MediaPlayer mpBeep;

  public static void InitSounds( Android.Content.Res.AssetManager Assets )
  {
    mpBeep = new Android.Media.MediaPlayer();

    InitSound_Beep( Assets );
  }

  private static void InitSound_Beep( Android.Content.Res.AssetManager Assets )
  {
    Android.Content.Res.AssetFileDescriptor AFD;

    AFD = Assets.OpenFd( "Sounds/beep-06.mp3" );
    mpBeep.SetDataSource( AFD.FileDescriptor, AFD.StartOffset, AFD.Length );
    AFD.Close();

    mpBeep.Prepare();
    mpBeep.SetVolume( 1f, 1f );
    mpBeep.Looping = false;
  }

  public static void PlaySound_Beep()
  {
    if (mpBeep.IsPlaying == true) 
    {
      mpBeep.Stop();
      mpBeep.Reset();
      InitSound_Beep(); 
    }
    mpBeep.Start();
  }
}

মূল ক্রিয়াকলাপে, তৈরিতে:

protected override void OnCreate( Bundle savedInstanceState )
{
  base.OnCreate( savedInstanceState );
  SetContentView( Resource.Layout.lmain_activity );
  ...
  eSound_Def.InitSounds( Assets );
  ...
}

কোডে কীভাবে ব্যবহার করবেন (বোতাম ক্লিকে):

private void bButton_Click( object sender, EventArgs e )
{
  eSound_Def.PlaySound_Beep();
}

ইউএনইউস কি?
ডায়নো ক্রিস

ইউএনআইএস হ'ল ভেরিয়েবল অ্যাসেট সহ কাস্টম স্ট্যাটিক ক্লাস, এটি অ্যাপ্লিকেশন সম্পদের উল্লেখ।
অ্যালটিভো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.