Скорее всего, вы предпочтете использовать класс SoundPool . Это уменьшает задержку, когда пора воспроизводить звук, и предлагает другие тонкости, такие как возможность расставить приоритеты звуков, когда слишком много для воспроизведения одновременно.
Из документов:
SoundPool - это набор семплов, которые можно загрузить в память из ресурса внутри APK или из файла в файловой системе. Библиотека SoundPool использует сервис MediaPlayer для декодирования звука в необработанный 16-битный монофонический или стереопоток PCM. Это позволяет приложениям отправлять сжатые потоки, не испытывая нагрузки на процессор и задержки декомпрессии во время воспроизведения.
Например:
/**
* How many sounds can be played at once.
*/
private static final int MAX_SOUND_POOL_STREAMS = 4;
/**
* Modify this as part of your own priority scheme. Higher numbers mean higher
* priority. If you don't care, it's okay to use the same priority for every
* sound.
*/
private static final int NORMAL_PRIORITY = 10;
private int mySoundId;
@Override
public void setupContent() {
this.soundPool = new SoundPool(MAX_SOUND_POOL_STREAMS,
AudioManager.STREAM_MUSIC, 100);
this.mySoundId = this.soundPool.load(this.getApplicationContext(),
R.raw.mySound, 1);
}
@Override
private void playMySound() {
this.soundPool.play(this.mySoundId, 1, 1, NORMAL_PRIORITY, 0, 1);
}
На это у меня ушло ДНЕЙ .... вот как это сделать
public void UploadProductImage(string SKU, string path)
{
var imageStream = new MemoryStream();
using (var i = Image.FromFile(@"c:\ProductImages\" + path))
{
i.Save(imageStream, ImageFormat.Jpeg);
}
byte[] encbuff = imageStream.ToArray();
string enc = Convert.ToBase64String(encbuff,0 , encbuff.Length);
var imageEntity = new catalogProductImageFileEntity();
imageEntity.content = enc;
imageEntity.mime = "image/jpeg";
imageStream.Close();
var entityP = new catalogProductAttributeMediaCreateEntity();
entityP.file = imageEntity;
entityP.types = new[] {"image", "small_image", "thumbnail"};
entityP.position = "0";
entityP.exclude = "0";
_m.catalogProductAttributeMediaCreate(MageSessionProvider.GetSession(), SKU, entityP, "default");
Console.WriteLine("Image Uploaded");
}
Кажется, мы с Дэном озадачились одним и тем же вопросом в одни и те же дни, и мы получаем то же решение!
Я использую XML-RPC и Magento API. Я написал этот код как часть более крупного класса, который считывает данные изображения из файла и делает его совместимым с Magento API.
internal void readFromFile(string fullImpgPath)
{
m_file.content = System.Convert.ToBase64String(System.IO.File.ReadAllBytes(fullImpgPath));
string ext = System.IO.Path.GetExtension(fullImpgPath).ToLower();
switch (ext)
{
case ".gif":
m_file.mime = "image/gif";
break;
case ".jpg":
case ".jpeg":
m_file.mime = "image/jpeg";
break;
case ".png":
m_file.mime = "image/png";
break;
case ".bmp":
m_file.mime = "image/bmp";
break;
case ".tif":
case ".tiff":
m_file.mime = "image/tiff";
break;
default:
m_file.mime = "application/octet-stream";
break;
}
}
Очень важно, чтобы «контент» имел строковый тип и
должен быть получен из байтов [] через вызов системной функции Convert.ToBase64String (...)
.
Что касается типа изображения MIME , только "gif" , поддерживаются "jpg" и "png" как я обнаружил, заглянув внутрь кода API Magento.