Topic: Кто сказал Мяу?
Обсуждение статьи Кто сказал Мяу? - работаем со звуками Му, Мяу, Гав
Все вопросы проплачены кошками - всемирно известными производителями котят
You are not logged in. Please login or register.
Для регистрации на форуме следует написать мне письмо. В ответе я напишу правильный ответ для прохождения регистрации.
Форум Александра Климова → Android → Кто сказал Мяу?
Обсуждение статьи Кто сказал Мяу? - работаем со звуками Му, Мяу, Гав
Спасибо за сайт, с удовольствием начал обучение, но на этой статье заткнулся.
Слишком много ошибок в примере.
- неправильный обработчик кнопок
- неправильная загрузка звук
мне кажеться что ошибки и во второй статье на которую ссылка.
Надеюсь автор внесет коррективы в статью, это я разобрался, а другой может и обидеться.
С горем пополам заставил корову мычать, но для этого пришлось полностью переделать программу.
И уменьшить версию 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;
}
}
}
Выложил программу на Гитхаб. Ссылка в статье. Сравнивайте. Все должно работать.
Здравствуйте. Спасибо за уроки, доступно все описано.
Соглашусь с taraserker, до этого проекта шло все более гладко.
При написании этого урока возникли непонятные ошибки.
В методе loadSound(String fileName) в строке return mSoundPool.load(afd, prior); при дебаге обнаружил что mSoundPool = null.
В Вашем примере, все работает отлично и строка проходит хорошо.
Где я мог допустить ошибку?
Ссылка на скачивание проекта: http://rghost.ru/6hP6qZDp6
Если у меня работает, а у вас нет, то искать ошибку нужно вам. Логично? Я не смотрю чужие исходники.
Мне кажется что это не много не серьезно, впутывать в программирование котят, ворон и что то в этом духе. Очень отвлекает. Да и воды много. Мне кажется что было бы не плохо создавать такие сайты для школьников которые изучают Pasсal или что то в этом духе. А тут нужно больше информации и скриншотов, но не котята анимация и всякая муть которая отвлекает от обучения программированию. Спасибо
Уважаемый klinoff.koli4ka, возможно вам приходилось слышать фразу "В чужой монастырь со своим уставом не ходят". Есть много других замечательных сайтов, где вы можете проходить обучение программированию без котиков. А что мне нужно делать на своем сайте, я прекрасно разберусь сам. Спасибо.
Вопрос по примеру, нужно ли освобождать ресурсы release, потому что в примере они вроде не освобождаются или и так покатит?
PS А сайт очень класный то что надо для програмирования под android. Если надо что то быстренько разобрать, то сразу на ваш сайт и очень редко чего там не находится, спс. И думаю коты благотворно влияют на изучение >_<
Да, ресурсы нужно освобождать. Этот урок я не писал с нуля, а брал готовый. И постоянно забываю сделать проверку кода, чтобы поправить немного его. Если вы это заметили, то вам респект.
урок отличный , спасибо вам и все сработал.
только хотел узнать как можно освобождать ресурсы, в коде не была написана об этом ,
потаму что при получим идентификаторы больще чем 10 звуков, приложение начинает тормозить.
Освобождать можно в любом месте, если больше не нужны звуки. Просто вызывается метод release(). А тормозить может из-за больших размеров звуков.
Добрый день, при выполнении данного урока возник вопрос, как сделать так чтоб отображались все кнопки на экране, есть ли какие то свойства автоматического выравнивания под размер экрана?
Да, есть. Но эта тема не относится к уроку. Вам нужно изучать различные типы разметок и выбрать подходящий.
почему у меня звук обрывается всегда через опредленное время,будь с любым форматом или продолжительностью звука ?
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);
}
}
Вы сначала проверьтесь на моем примере. Если все нормально, то ищите проблему у себя, сравнивая код. Если и мой пример у вас глючит, то тогда не знаю причины.
Александр,спасибо Вам за труд,котики и вороны не отвлекают,а помогают разобраться на примерах,благодаря Вам,стало получаться.Благодарю!
Доброго здравия. Хочу выразить слова благодарности за качественный курс программирования для Android, написанный, к тому же, на человеческом языке (то есть по-русски).
Не могли бы Вы объяснить почему в коде обсуждаемого урока нет строчки содержащей:
SoundPool.Builder().setMaxStreams(3)
Хотя присутствует
SoundPool(3, AudioManager.STREAM_MUSIC, 0)
Подскажите, где можно поискать информацию по одновременному (асинхронному) воспроизведению звуковых данных. Является ли в этом случае создание дочерних пользовательских потоков необходимостью? Задумал использовать планшетник в качестве звукогенератора для MIDI клавиатуры. А для этого требуется, чтоб несколько музыкальных тонов могли звучать одновременно, причём как внезапно возникая, так и затухая, без нарушения звучания других тонов.
Спасибо за понимание.
Я не могу рассматривать все возможные ситуации. Что-то придется изучать самостоятельно. Насколько я помню в примерах у Гугла есть что-то связанное с MIDI-устройствами. Поищите.
Ответ понятен.
Попробую уточнить вопрос.
В описании учебной задачи Вы пишете:
Зададим максимальное количество одновременно проигрываемых потоков - 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 устройствами.
Однако если бы Вы вспомнили примеры на русском языке, и написали мне здесь (хотя бы ключевые слова), то, полагаю, развитие обсуждаемого курса могло бы получить новое направление.
С уважением.
Форум Александра Климова → Android → Кто сказал Мяу?
Powered by PunBB, supported by Informer Technologies, Inc.