Topic: Кто сказал Мяу?

Обсуждение статьи Кто сказал Мяу? - работаем со звуками Му, Мяу, Гав

2 (edited by taraserker 2015-10-06 23:35:34)

Re: Кто сказал Мяу?

Спасибо за сайт, с удовольствием начал обучение, но на этой статье заткнулся.
Слишком много ошибок в примере.
- неправильный обработчик кнопок
- неправильная загрузка звук
мне кажеться что ошибки и во второй статье на которую ссылка.

Надеюсь автор внесет коррективы в статью, это я разобрался, а другой может и обидеться.

С горем пополам заставил корову мычать, но для этого пришлось полностью переделать программу.
И уменьшить версию SDK для компиляции ниже 21

package il.co.tarasriv.day13_sound;

import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class MainActivity extends Activity implements OnClickListener {

  private SoundPool     mSoundPool;
  private AssetManager  mAssetManager;
  private int mCatSound, mCowSound, mDogSound, mChikenSound, mSheepSound, mDuckSound;
  private int mCountLoadedSound;
  private Context mContext;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //mContext = this;

    mSoundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 100);
   // mAssetManager = getAssets();

    mCowSound = 1;
    mSoundPool.load(this, R.raw.cow , mCowSound);

    ImageButton cowImageButton = (ImageButton)findViewById(R.id.imageButtonCow);
    cowImageButton.setOnClickListener(this);

  }

  @Override
  public void onClick(View v){
    switch (v.getId()){
      case R.id.imageButtonCow:
        mSoundPool.play(mCowSound,1,1,1,1,1f);
        break;
    }

  }

}

Re: Кто сказал Мяу?

Выложил программу на Гитхаб. Ссылка в статье. Сравнивайте. Все должно работать.

Re: Кто сказал Мяу?

Здравствуйте. Спасибо за уроки, доступно все описано.
Соглашусь с taraserker, до этого проекта шло все более гладко.
При написании этого урока возникли непонятные ошибки.
В методе loadSound(String fileName) в строке return mSoundPool.load(afd, prior); при дебаге обнаружил что mSoundPool = null.
В Вашем примере, все работает отлично и строка проходит хорошо.
Где я мог допустить ошибку?
Ссылка на скачивание проекта: http://rghost.ru/6hP6qZDp6

Re: Кто сказал Мяу?

Если у меня работает, а у вас нет, то искать ошибку нужно вам. Логично? Я не смотрю чужие исходники.

Re: Кто сказал Мяу?

Мне кажется что это не много не серьезно, впутывать в программирование котят, ворон и что то в этом духе. Очень отвлекает. Да и воды много. Мне кажется что было бы не плохо создавать такие сайты для школьников которые изучают Pasсal или что то в этом духе. А тут нужно больше информации и скриншотов, но не котята анимация и всякая муть которая отвлекает от обучения программированию. Спасибо

Re: Кто сказал Мяу?

Уважаемый klinoff.koli4ka, возможно вам приходилось слышать фразу "В чужой монастырь со своим уставом не ходят". Есть много других замечательных сайтов, где вы можете проходить обучение программированию без котиков. А что мне нужно делать на своем сайте, я прекрасно разберусь сам. Спасибо.

8 (edited by elfenlied 2015-11-13 20:21:10)

Re: Кто сказал Мяу?

Вопрос по примеру, нужно ли освобождать ресурсы release, потому что в примере они вроде не освобождаются или и так покатит?
PS А сайт очень класный то что надо для програмирования под android. Если надо что то быстренько разобрать, то сразу на ваш сайт и очень редко чего там не находится, спс. И думаю коты благотворно влияют на изучение >_<

Re: Кто сказал Мяу?

Да, ресурсы нужно освобождать. Этот урок я не писал с нуля, а брал готовый. И постоянно забываю сделать проверку кода, чтобы поправить немного его. Если вы это заметили, то вам респект.

10 (edited by o.m.k 2015-12-16 22:26:45)

Re: Кто сказал Мяу?

урок отличный , спасибо вам и все сработал.
только хотел узнать как можно освобождать ресурсы, в коде не была написана об этом ,
потаму что при получим идентификаторы больще чем 10 звуков,  приложение начинает тормозить.

Re: Кто сказал Мяу?

Освобождать можно в любом месте, если больше не нужны звуки. Просто вызывается метод release(). А тормозить может из-за больших размеров звуков.

Re: Кто сказал Мяу?

Добрый день, при выполнении данного урока возник вопрос, как сделать так чтоб отображались все кнопки на экране, есть ли какие то свойства автоматического выравнивания под размер экрана?
PunBB bbcode test

Re: Кто сказал Мяу?

Да, есть. Но эта тема не относится к уроку. Вам нужно изучать различные типы разметок и выбрать подходящий.

Re: Кто сказал Мяу?

почему у меня звук обрывается всегда через опредленное время,будь с любым форматом или продолжительностью звука ?

package com.alex.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    private SoundPool mSound;
    private int mMelody=1;
    private int mPlay;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSound = new SoundPool(1, AudioManager.STREAM_MUSIC,0);
        mSound.load(this, R.raw.music1, 1);

    }

    public void Play(View view) {
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        mPlay = mSound.play(mMelody,1,1,1,0,1);
    }
}

Re: Кто сказал Мяу?

Вы сначала проверьтесь на моем примере. Если все нормально, то ищите проблему у себя, сравнивая код. Если и мой пример у вас глючит, то тогда не знаю причины.

Re: Кто сказал Мяу?

Александр,спасибо Вам за труд,котики и вороны не отвлекают,а помогают разобраться на примерах,благодаря Вам,стало получаться.Благодарю!

Re: Кто сказал Мяу?

Доброго здравия. Хочу выразить слова благодарности за качественный курс программирования для Android, написанный, к тому же, на человеческом языке (то есть по-русски).
Не могли бы Вы объяснить почему в коде обсуждаемого урока нет строчки содержащей:

SoundPool.Builder().setMaxStreams(3)

Хотя присутствует

SoundPool(3, AudioManager.STREAM_MUSIC, 0)

Подскажите, где можно поискать информацию по одновременному (асинхронному) воспроизведению звуковых данных. Является ли в этом случае создание дочерних пользовательских потоков необходимостью? Задумал использовать планшетник в качестве звукогенератора для MIDI клавиатуры. А для этого требуется, чтоб несколько музыкальных тонов могли звучать одновременно, причём как внезапно возникая, так и затухая, без нарушения звучания других тонов.
Спасибо за понимание.

Re: Кто сказал Мяу?

Я не могу рассматривать все возможные ситуации. Что-то придется изучать самостоятельно. Насколько я помню в примерах у Гугла есть что-то связанное с MIDI-устройствами. Поищите.

Re: Кто сказал Мяу?

Ответ понятен.
Попробую уточнить вопрос.
В описании учебной задачи Вы пишете:

Зададим максимальное количество одновременно проигрываемых потоков - 3.

(Это вполне естественно. Ведь кошачий концерт не может содержать лишь один голос. Тёхголосье — это уже по-нашему!)
В коде файла MainActivity.java содержатся следующие строки:

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private void createNewSoundPool() {
        AudioAttributes attributes = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_GAME)
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .build();
        mSoundPool = new SoundPool.Builder()
                .setAudioAttributes(attributes)
                .build();
    }

    @SuppressWarnings("deprecation")
    private void createOldSoundPool() {
        mSoundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
    }

Я его понимаю так, что если целевое API = 21 (либо старше?), то для создания mSoundPool используем SoundPool.Builder() (новый, рекомендуемый способ). В противном случае используем прежний конструктор: SoundPool(int maxStreams, int streamType, int srcQuality).
Однако в методе createNewSoundPool для создания mSoundPool не задано максимальное количество потоков!
Полагаю правильное решение, написать там:

mSoundPool = new SoundPool.Builder()
                .setAudioAttributes(attributes)
                .setMaxStreams(4)
                .build();

Для Версии API Build.VERSION_CODES.LOLLIPOP (и старше?) используем четырёхголосье! (А это уже следующий уровень для кошачьего мяуканья!)
Кроме того, если кошка захотела бы услышать концерт с использованием MIDI устройств, то без программирования взаимодействия через порт USB не обойтись.
Конечно же и наверняка у "Гугла" есть что-то связанное с MIDI устройствами.
Однако если бы Вы вспомнили примеры на русском языке, и написали мне здесь (хотя бы ключевые слова), то, полагаю, развитие обсуждаемого курса могло бы получить новое направление.
С уважением.