Управление аудио в презентациях с использованием C++
Создание аудио‑кадров
Aspose.Slides for C++ позволяет добавлять аудиофайлы на слайды. Аудиофайлы встраиваются в слайды в виде аудио‑кадров.
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Загрузите поток аудиофайла, который хотите встроить в слайд.
- Добавьте встроенный аудио‑кадр (содержащий аудиофайл) на слайд.
- Установите PlayMode и
Volume, предоставляемые объектом IAudioFrame. - Сохраните изменённую презентацию.
// Создаёт объект класса Presentation, представляющий файл презентации
auto pres = System::MakeObject<Presentation>();
// Получает первый слайд
auto sld = pres->get_Slides()->idx_get(0);
// Загружает wav‑файл звука в поток
auto fstr = System::MakeObject<FileStream>(u"sampleaudio.wav", FileMode::Open, FileAccess::Read);
// Добавляет аудио‑кадр
auto audioFrame = sld->get_Shapes()->AddAudioFrameEmbedded(50.0f, 150.0f, 100.0f, 100.0f, fstr);
// Устанавливает режим воспроизведения и громкость аудио
audioFrame->set_PlayMode(AudioPlayModePreset::Auto);
audioFrame->set_Volume(AudioVolumeMode::Loud);
// Записывает файл PowerPoint на диск
pres->Save(u"AudioFrameEmbed_out.pptx", SaveFormat::Pptx);
Изменение миниатюры аудио‑кадра
При добавлении аудиофайла в презентацию он отображается в виде кадра со стандартным изображением по умолчанию (см. изображение ниже). Вы можете изменить миниатюру аудио‑кадра, задав собственное изображение.
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slides()->idx_get(0);
// Добавляет аудио‑кадр на слайд с указанным положением и размером.
auto audioStream = System::MakeObject<System::IO::FileStream>(u"sample2.mp3",
System::IO::FileMode::Open, System::IO::FileAccess::Read);
auto audioFrame = slide->get_Shapes()->AddAudioFrameEmbedded(150.0f, 100.0f, 50.0f, 50.0f, audioStream);
// Добавляет изображение в ресурсы презентации.
auto imageStream = System::IO::File::OpenRead(u"eagle.jpeg");
auto audioImage = presentation->get_Images()->AddImage(imageStream);
// Устанавливает изображение для аудио‑кадра.
audioFrame->get_PictureFormat()->get_Picture()->set_Image(audioImage); // <-----
//Сохраняет изменённую презентацию на диск
presentation->Save(u"example_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Изменение параметров воспроизведения аудио
Aspose.Slides for C++ позволяет менять параметры, контролирующие воспроизведение аудио или его свойства. Например, можно отрегулировать громкость, установить воспроизведение в цикле или скрыть значок аудио.
Панель Audio Options в Microsoft PowerPoint:

PowerPoint Audio Options, соответствующие методам Aspose.Slides AudioFrame:
- Start — выпадающий список соответствует методу AudioFrame::set_PlayMode.
- Volume — соответствует методу AudioFrame::set_Volume.
- Play Across Slides — соответствует методу AudioFrame::set_PlayAcrossSlides.
- Loop until Stopped — соответствует методу AudioFrame::set_PlayLoopMode.
- Hide During Show — соответствует методу AudioFrame::set_HideAtShowing.
- Rewind after Playing — соответствует методу AudioFrame::set_RewindAudio.
PowerPoint Editing options, соответствующие свойствам Aspose.Slides AudioFrame:
- Fade In — соответствует методу AudioFrame.set_FadeInDuration.
- Fade Out — соответствует методу AudioFrame.set_FadeOutDuration.
- Trim Audio Start Time — соответствует методу AudioFrame.set_TrimFromStart.
- Trim Audio End Time — значение равно длительности аудио минус значение, задаваемое методом AudioFrame.set_TrimFromEnd.
Ползунок Volume на панели управления аудио в PowerPoint соответствует методу AudioFrame.set_VolumeValue. Он позволяет изменить громкость аудио в процентах.
Как изменить параметры воспроизведения аудио:
- Create или получите аудио‑кадр.
- Установите новые значения свойств аудио‑кадра, которые требуется изменить.
- Сохраните изменённый файл PowerPoint.
auto pres = System::MakeObject<Presentation>(u"AudioFrameEmbed_out.pptx");
// Получить форму
auto shape = pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0);
// Приводит форму к типу AudioFrame
auto audioFrame = System::ExplicitCast<AudioFrame>(shape);
// Устанавливает режим воспроизведения «по щелчку»
audioFrame->set_PlayMode(AudioPlayModePreset::OnClick);
// Устанавливает громкость на низкую
audioFrame->set_Volume(AudioVolumeMode::Low);
// Делает аудио воспроизводимым на всех слайдах
audioFrame->set_PlayAcrossSlides(true);
// Отключает зацикливание для аудио
audioFrame->set_PlayLoopMode(false);
// Скрывает AudioFrame во время показа слайдов
audioFrame->set_HideAtShowing(true);
// Перематывает аудио к началу после воспроизведения
audioFrame->set_RewindAudio(true);
// Сохраняет файл PowerPoint на диск
pres->Save(u"AudioFrameEmbed_changed.pptx", SaveFormat::Pptx);
Этот пример C++ показывает, как добавить новый аудио‑кадр с встроенным аудио, обрезать его и задать длительности затухания:
auto pres = MakeObject<Presentation>();
auto slide = pres->get_Slide(0);
auto audioData = File::ReadAllBytes(u"sampleaudio.mp3");
auto audio = pres->get_Audios()->AddAudio(audioData);
auto audioFrame = slide->get_Shapes()->AddAudioFrameEmbedded(50, 50, 100, 100, audio);
// Sets the trimming start offset to 1.5 seconds
audioFrame->set_TrimFromStart(1500);
// Sets the trimming end offset to 2 seconds
audioFrame->set_TrimFromEnd(2000);
// Sets the fade-in duration to 200 ms
audioFrame->set_FadeInDuration(200);
// Sets the fade-out duration to 500 ms
audioFrame->set_FadeOutDuration(500);
pres->Save(u"AudioFrameTrimFade_out.pptx", SaveFormat::Pptx);
pres->Dispose();
Следующий пример кода демонстрирует получение аудио‑кадра с встроенным аудио и установку громкости в 85 %:
auto pres = MakeObject<Presentation>(u"AudioFrameEmbed_out.pptx");
// Получает форму аудио-кадра
auto audioFrame = ExplicitCast<IAudioFrame>(pres->get_Slide(0)->get_Shape(0));
// Устанавливает громкость аудио на 85%
audioFrame->set_VolumeValue(85);
pres->Save(u"AudioFrameValue_out.pptx", SaveFormat::Pptx);
pres->Dispose();
Управление субтитрами аудио
Aspose.Slides позволяет добавлять закрытые субтитры к аудио‑кадру через метод get_CaptionTracks. Этот метод возвращает объект ICaptionsCollection, который позволяет добавлять дорожки WebVTT, перебрать существующие дорожки и при необходимости удалять их.
Добавление субтитров к аудио
Используйте метод get_CaptionTracks для привязки одной или нескольких дорожек к аудио‑кадру. В примере ниже аудиофайл добавляется на слайд, после чего новая дорожка субтитров загружается из файла .vtt.
auto presentation = MakeObject<Presentation>();
auto audioData = File::ReadAllBytes(u"audio.mp3");
auto audio = presentation->get_Audios()->AddAudio(audioData);
auto slide = presentation->get_Slide(0);
auto audioFrame = slide->get_Shapes()->AddAudioFrameEmbedded(10, 10, 50, 50, audio);
// Add a new caption track from a WebVTT file.
audioFrame->get_CaptionTracks()->Add(u"New track", u"track.vtt");
presentation->Save(u"audio_with_captions.pptx", SaveFormat::Pptx);
presentation->Dispose();
Извлечение субтитров из аудио
Можно пройтись по дорожкам субтитров, связанным с аудио‑кадром, и сохранить их как файлы .vtt. Каждая дорожка предоставляет свои двоичные данные и уникальный идентификатор, которые могут использоваться при экспорте субтитров.
auto presentation = MakeObject<Presentation>(u"audio_with_captions.pptx");
auto slide = presentation->get_Slide(0);
for (auto&& shape : slide->get_Shapes())
{
if (ObjectExt::Is<IAudioFrame>(shape))
{
auto audioFrame = ExplicitCast<IAudioFrame>(shape);
for (auto&& captionTrack : audioFrame->get_CaptionTracks())
{
// Сохранить каждую дорожку субтитров как файл .vtt.
auto fileName = captionTrack->get_CaptionId().ToString() + u".vtt";
File::WriteAllBytes(fileName, captionTrack->get_BinaryData());
}
}
}
presentation->Dispose();
Удаление субтитров из аудио
Для удаления субтитров из аудио‑кадра используйте методы из ICaptionsCollection, такие как Clear, Remove, или RemoveAt. Пример ниже удаляет все дорожки субтитров из аудио‑кадра.
auto presentation = MakeObject<Presentation>(u"audio_with_captions.pptx");
auto slide = presentation->get_Slide(0);
auto audioFrame = ExplicitCast<IAudioFrame>(slide->get_Shape(0));
// Удалить все дорожки субтитров из аудио‑кадра.
audioFrame->get_CaptionTracks()->Clear();
presentation->Save(u"audio_without_captions.pptx", SaveFormat::Pptx);
presentation->Dispose();
Извлечение аудио
Aspose.Slides позволяет извлекать звук, используемый в переходах слайд‑шоу. Например, можно извлечь звук, используемый в конкретном слайде.
- Создайте экземпляр класса Presentation и загрузите презентацию, содержащую аудио.
- Получите ссылку на нужный слайд по его индексу.
- Получите доступ к переходам слайд‑шоу для этого слайда.
- Извлеките звук в виде массива байт.
String presName = u"AudioSlide.pptx";
// Создаёт объект класса Presentation, представляющий файл презентации
auto pres = System::MakeObject<Presentation>(presName);
// Получает нужный слайд
auto slide = pres->get_Slides()->idx_get(0);
// Получает эффекты перехода слайд‑шоу для слайда
auto transition = slide->get_SlideShowTransition();
// Извлекает звук в массив байт
auto audio = transition->get_Sound()->get_BinaryData();
Console::WriteLine(String(u"Length: ") + audio->get_Length());
FAQ
Можно ли использовать один и тот же аудио‑ресурс на нескольких слайдах без увеличения размера файла?
Да. Добавьте аудио один раз в общую audio collection презентации и создайте дополнительные аудио‑кадры, ссылающиеся на этот существующий ресурс. Это предотвращает дублирование медиа‑данных и удерживает размер презентации под контролем.
Можно ли заменить звук в существующем аудио‑кадре, не создавая форму заново?
Да. Для связанного звука обновите link path до нового файла. Для встроенного звука замените объект embedded audio другим из audio collection презентации. Формат кадра и большинство настроек воспроизведения сохранятся.
Изменяется ли исходный аудио‑файл при обрезке?
Нет. Обрезка меняет только границы воспроизведения. Исходные байты аудио остаются нетронутыми и доступны через встроенный аудио‑объект или коллекцию аудио презентации.