提交 d4f7f39c 编写于 作者: V vit9696

OpenCoreAudio: Added voice assistance support and language detect

上级 7001e935
......@@ -29,6 +29,7 @@ OpenCore Changelog
- Fixed drivers starting with `#` not being skipped
- Added audio support through AudioDxe with optional boot chime
- Added VoiceOver accessability support in boot.efi for 10.13+
- Added `PickerAudioAssist` option for audio assistance in picker
#### v0.5.5
- Fixed CPU bus ratio calculation for Nehalem and Westmere
......
......@@ -591,6 +591,8 @@
<true/>
<key>PickerAttributes</key>
<integer>0</integer>
<key>PickerAudioAssist</key>
<false/>
<key>PollAppleHotKeys</key>
<false/>
<key>ShowPicker</key>
......
......@@ -591,6 +591,8 @@
<true/>
<key>PickerAttributes</key>
<integer>0</integer>
<key>PickerAudioAssist</key>
<false/>
<key>PollAppleHotKeys</key>
<false/>
<key>ShowPicker</key>
......
......@@ -536,6 +536,7 @@ OcMiscBoot (
Context->AllCustomEntryCount = EntryIndex;
Context->PollAppleHotKeys = Config->Misc.Boot.PollAppleHotKeys;
Context->HideAuxiliary = Config->Misc.Boot.HideAuxiliary;
Context->PickerAudioAssist = Config->Misc.Boot.PickerAudioAssist;
OcLoadPickerHotKeys (Context);
......
......@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <OpenCore.h>
#include <Guid/AppleVariable.h>
#include <Guid/OcVariables.h>
#include <Guid/GlobalVariable.h>
......@@ -49,6 +50,19 @@ STATIC
OC_AUDIO_PROTOCOL *
mOcAudio;
typedef struct OC_AUDIO_FILE_ {
UINT8 *Buffer;
UINT32 Size;
} OC_AUDIO_FILE;
STATIC OC_AUDIO_FILE mAppleAudioFiles[AppleVoiceOverAudioFileMax];
STATIC OC_AUDIO_FILE mOcAudioFiles[OcVoiceOverAudioFileMax - OcVoiceOverAudioFileBase];
//
// Note, currently we are not I/O bound, so enabling this has no effect at all.
// Reconsider it when we resolve lags with AudioDxe.
//
STATIC BOOLEAN mEnableAudioCaching = FALSE;
STATIC
EFI_STATUS
EFIAPI
......@@ -60,16 +74,131 @@ OcAudioAcquireFile (
OUT UINT32 *BufferSize
)
{
CHAR8 IndexPath[8];
CHAR16 FilePath[96];
OC_STORAGE_CONTEXT *Storage;
CONST CHAR8 *BaseType;
CONST CHAR8 *BasePath;
BOOLEAN Localised;
OC_AUDIO_FILE *CacheFile;
Storage = (OC_STORAGE_CONTEXT *) Context;
Localised = TRUE;
BaseType = "AXEFIAudio";
CacheFile = NULL;
if (File >= OcVoiceOverAudioFileBase && File < OcVoiceOverAudioFileMax) {
if (mEnableAudioCaching) {
CacheFile = &mOcAudioFiles[File - OcVoiceOverAudioFileBase];
if (CacheFile->Buffer != NULL) {
*Buffer = CacheFile->Buffer;
*BufferSize = CacheFile->Size;
return EFI_SUCCESS;
}
}
BaseType = "OCEFIAudio";
if (File > OcVoiceOverAudioFileIndexBase && File <= OcVoiceOverAudioFileIndexMax) {
AsciiSPrint (
IndexPath,
sizeof (IndexPath),
"%a%c",
File >= OcVoiceOverAudioFileIndexAlphabetical ? "Letter" : "",
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[File - OcVoiceOverAudioFileIndexBase]
);
BasePath = IndexPath;
if (File >= OcVoiceOverAudioFileIndexAlphabetical) {
Localised = FALSE;
}
} else {
switch (File) {
case OcVoiceOverAudioFileAbortTimeout:
BasePath = "AbortTimeout";
break;
case OcVoiceOverAudioFileChooseOS:
BasePath = "ChooseOS";
break;
case OcVoiceOverAudioFileDefault:
BasePath = "Default";
break;
case OcVoiceOverAudioFileDiskImage:
BasePath = "DiskImage";
break;
case OcVoiceOverAudioFileEnterPassword:
BasePath = "EnterPassword";
break;
case OcVoiceOverAudioFileExecutionFailure:
BasePath = "ExecutionFailure";
break;
case OcVoiceOverAudioFileExecutionSuccessful:
BasePath = "ExecutionSuccessful";
break;
case OcVoiceOverAudioFileExternal:
BasePath = "External";
break;
case OcVoiceOverAudioFileExternalOption:
BasePath = "ExternalOption";
break;
case OcVoiceOverAudioFileLoading:
BasePath = "Loading";
break;
case OcVoiceOverAudioFilemacOS:
BasePath = "macOS";
break;
case OcVoiceOverAudioFilemacOS_Recovery:
BasePath = "macOS_Recovery";
break;
case OcVoiceOverAudioFileOtherOS:
BasePath = "OtherOS";
break;
case OcVoiceOverAudioFilePasswordAccepted:
BasePath = "PasswordAccepted";
break;
case OcVoiceOverAudioFilePasswordIncorrect:
BasePath = "PasswordIncorrect";
break;
case OcVoiceOverAudioFilePasswordRetryLimit:
BasePath = "PasswordRetryLimit";
break;
case OcVoiceOverAudioFileReloading:
BasePath = "Reloading";
break;
case OcVoiceOverAudioFileResetNVRAM:
BasePath = "ResetNVRAM";
break;
case OcVoiceOverAudioFileSelected:
BasePath = "Selected";
break;
case OcVoiceOverAudioFileShowAuxiliary:
BasePath = "ShowAuxiliary";
break;
case OcVoiceOverAudioFileTimeout:
BasePath = "Timeout";
break;
case OcVoiceOverAudioFileUEFI_Shell:
BasePath = "UEFI_Shell";
break;
case OcVoiceOverAudioFileWelcome:
BasePath = "Welcome";
break;
case OcVoiceOverAudioFileWindows:
BasePath = "Windows";
break;
default:
BasePath = NULL;
break;
}
}
} else if (File < AppleVoiceOverAudioFileMax) {
if (mEnableAudioCaching) {
CacheFile = &mAppleAudioFiles[File];
if (CacheFile->Buffer != NULL) {
*Buffer = CacheFile->Buffer;
*BufferSize = CacheFile->Size;
return EFI_SUCCESS;
}
}
BaseType = "AXEFIAudio";
switch (File) {
case AppleVoiceOverAudioFileVoiceOverOn:
BasePath = "VoiceOverOn";
......@@ -113,6 +242,9 @@ OcAudioAcquireFile (
BasePath = NULL;
break;
}
} else {
BasePath = NULL;
}
if (BasePath == NULL) {
DEBUG ((DEBUG_INFO, "OC: Unknown Wave %d\n", File));
......@@ -165,6 +297,11 @@ OcAudioAcquireFile (
return EFI_NOT_FOUND;
}
if (CacheFile != NULL) {
CacheFile->Buffer = *Buffer;
CacheFile->Size = *BufferSize;
}
return EFI_SUCCESS;
}
......@@ -176,7 +313,9 @@ OcAudioReleaseFile (
IN UINT8 *Buffer
)
{
if (!mEnableAudioCaching) {
FreePool (Buffer);
}
return EFI_SUCCESS;
}
......@@ -252,6 +391,8 @@ OcLoadUefiAudioSupport (
return FALSE;
}
OcSetVoiceOverLanguage (NULL);
if (Config->Uefi.Audio.PlayChime && VolumeLevel > 0 && !Muted) {
DEBUG ((DEBUG_INFO, "OC: Starting to play chime...\n"));
Status = OcAudio->PlayFile (
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册